0

この質問は別の質問に続き、ここ
で解決されました 。今度は別のカウントを行いたいので、理解するのがより困難です。

私の解析したHTMLテーブルでは、すべての行に2つの非常に類似した、結果として生じる'td'(番号4および5)が含まれています。

    <tr>
(1) <td class="tdClass" ....</td>
(2) <td class="tdClass" ....</td>
(3) <td class="tdClass" ....</td>
(4) <td class="tdClass" align="center" nowrap="">No</td>
(5) <td class="tdClass" align="center" nowrap="">No</td>
    </tr>

文字列は、最初の「td」では「いいえ」、2番目の文字列では「はい」、またはその逆、両方とも「はい」または両方とも「いいえ」である可能性があります。

5種類の「td」に「いいえ」が含まれている数を数えたい

今では、他の「td」をループして数え(上部にリンクされている前の質問の選択された回答を参照)、ターゲット文字列に一致するもの。これは、これらのターゲット文字列が各行に1回だけ表示さ
れるために実行できます。この場合、代わりに、ターゲット文字列( "No")は各行で一意ではありません。これは、上記の例のように、同じ'tr'に2回('td' 4と5で)存在する可能性があるためです。 それによって、ターゲット文字列「No」に一致する各行の2番目の(5)'td'のみを選択し、(4)'td'を除外する方法が本当にわかりません。





明らかに、これら2つの「td」は異なる列タイトルの下にありますが、これはそれらを区別するのに役立ちませんでした。

私が考えた唯一の解決策は、左から「td」の位置を数え、5番目の位置だけを選択することですが、それが可能かどうかはわかりません。

4

2 に答える 2

0

あなたの前の質問からコードをとると、あなたはすでにこれを持っているはずです:

$targetString = 'TARGET STRING';
$rows = $table->find('.trClass');

$count = 0;
foreach($rows as $row) {
    foreach($row->find('td') as $td) {
        if ($td->innertext === $targetString) {
            $count++;
            break;
        }
    }
}

あなたはすでにtdを通過しているので、あなたが言ったことをするのは非常に簡単でしょう-「左から'td'の位置を数え、5番目だけを選択する」。それが間違いなくあなたができる5番目のtdであることを知っている限り:

foreach($rows as $row) {
    $tdcount = 0;
    foreach($row->find('td') as $td) {
        //...

        //Bear in mind the first td will have tdcount=0, second tdcount=1 etc. so fifth:
        if($tdcount === 4 && ( 'Yes'===$td->innertext || 'No'===$td->innertext) ) {
            //do whatever you want with this td
        }

        $tdcount++;
    }
}
于 2012-05-04T17:34:47.237 に答える
0

あなたは確かにいくつかの部分を更新する必要があります。最初に4番目と5番目の要素が必要になるため、それを確認する必要があります(カウンターを保持するか、forループを使用します)。次に、ループを停止するため、この場合は中断する必要はありません。

コード:

<?php

$targetString = 'No';
$rows = $table->find('.trClass');

$count = 0;
foreach($rows as $row) {
    $tds = $row->find('td');
    for (i = 0; i < count($tds); $i++) {
        // Check for the 4th and 5th element
        if (($i === 3 || $i === 4) && $tds[$i]->innertext === $targetString) {
            $count++;
        }
    }
}

ここでは、手動でカウンターを保持したくないため、foreachループの代わりにforループを使用します。これは$i簡単に使えて、インデックスとしても使えます。

于 2012-05-04T17:41:23.383 に答える