0
header('Content-Type: text/html; charset=utf-8');

include 'simple_html_dom.php';

$html = file_get_html('http://www.wettpoint.com/results/soccer/uefa/uefa-cup-final.html');

$cells = $html->find('table[class=gen] tr');

foreach($cells as $cell) {
  $pre_edit = $cell->plaintext . '<br/>';
  echo $pre_edit;
}

$pos = strpos($pre_edit, "Tennis");

var_dump($pos);

if ($pos == true) {
  echo "string found!";
}
else 
{
  echo "string not found";
}

文字列「Tennis」を検索すると、PHP は「string not found」を返します。長さ= 149のforeachの最後の反復に属する文字列を検索した場合にのみ、「文字列が見つかりました」が返されます( $pre_edit varの最初の5行は無視されます)。この問題を解決する方法について、アドバイスをいただけないでしょうか。ありがとうございました!

4

1 に答える 1

2

ループ内で検索を行っていないため、ループによって取得された最後のノードforeach()しか取得できません。

コードを適切にインデントしていれば、問題が発生します。そのはず:

foreach($cells as $cell) {
    $pre_edit = $cell->plaintext . '<br/>';
    echo $pre_edit;
    $pos = strpos($pre_edit, "Games");
    var_dump($pos);
    if ($pos !== false) {
        echo "string found!";
    } else {
        echo "string not found";
    }
}

今、あなたは持っています:

foreach($cells as $cell) {
   blah blah
}
if (strpos(...))) {
     blah blah
}

$pos == trueに変更したことにも注意してください$pos !== false0strpos は、検索している文字列が文字列の先頭にある場合に a を返すことができます。しかし、PHP では0 == falseTRUE ですが、0 === falseFALSE です。検索が失敗したときに strpos が返すブール値 FALSE を確認するには、型と値を比較する厳密な等価性テストを使用する必要があります。

于 2013-06-14T15:54:11.427 に答える