【问题标题】:Breaking a foreach loop打破 foreach 循环
【发布时间】:2014-01-16 07:19:06
【问题描述】:

我无法跳出 foreach 循环。我认为结构是正确的,代码还有其他问题。请让我知道是什么问题,(不仅仅是一个工作代码)我想从我的错误中吸取教训。谢谢

我正在使用简单的 html dom 来抓取一些信息,并且我希望循环在条件匹配时中断。这是我的代码:

<?php
$mainjob = file_get_html('link to scrap here');
$newarr = array();
foreach($mainjob->find('td[valign=middle]') as $d) {
    $data = $d->innertext;
    $newarr[] = $data;
    echo $data . "<br>";
    if($data == "Job Opportunity Description:") {
        break;
    }

}
print_r($newarr);

【问题讨论】:

  • echo $data 的输出是什么
  • 输出中的报废数据
  • 如果 $data 不等于特定字符串,则不会破坏此循环。
  • 通常,源代码的标签中有很多空白(在浏览器的输出中被剥离)。无论如何,我的观点是尝试修剪innertext 可能是值得的。喜欢:trim($data.trim) == ...

标签: php web-scraping


【解决方案1】:

1) 我猜你的 $data=="Job Opportunity Description:" 条件不正确,所以它没有调用中断;

2) 将您的 $mainjob->find('td[valign=middle]') 置于循环条件之外,这样每次迭代都不会调用它:

$tds = $mainjob->find('td[valign=middle]');
foreach($td as $d){}

3) 为什么要在 $newarr 变量中添加方括号?

4) 也许你的 $data 字符串仍然包含 html 标签(由于你的浏览器,这些标签没有被 echo 显示。所以条件会返回 false。

【讨论】:

    【解决方案2】:

    问题出在空白处,我使用 trim() 修剪了空白区域,它可以工作。我推荐 Ayman Safadi 的答案。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 2014-03-24
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多