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";
}

当我搜索字符串“网球”时,PHP 会返回“找不到字符串”。如果我搜索属于长度为 149 的 foreach 的最后一次迭代的字符串(忽略 $pre_edit var 的前五行),它只会返回“找到的字符串”。你能给我一些关于如何解决这个问题的建议吗?谢谢!

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 !== false. 0如果您要搜索的字符串位于字符串的开头,strpos 可以并且将返回 a 。但在 PHP 中,0 == false是 TRUE,但又0 === false是 FALSE。您需要使用比较类型和值的严格相等测试来检查 strpos 在搜索失败时返回的布尔值 FALSE。

于 2013-06-14T15:54:11.427 回答