0

我正在使用 simplehtmldom 从站点中获取 html。然后我搜索页面上的所有 div 并显示字数大于 300 的内部文本。为此,我使用 foreach 进行迭代。

$findDivs = $html->find('div');

foreach($findDivs as $findDiv) {
  $wordCount = explode(' ', $findDiv->outertext);
  $wordCount = count($wordCount);
  if($wordCount <= 300) {
    $findDiv->outertext = '';
   }
   else {
     echo $findDiv->outertext . '<br />';
  }
}

我遇到的问题是结果重复了 6 次。我只能假设这是因为每次迭代都会循环所有 div。但是,我不确定我可以使用什么技术来确保每个 div 只评估一次。

4

2 回答 2

0

你想要innertext但你的代码状态outertext- 我认为这是重复的原因。

foreach($html->find('div') as $findDiv) {
  $wordCount = explode(' ', $findDiv->innertext);
  $wordCount = count($wordCount);
  if($wordCount > 300) {
    echo $findDiv->outertext . '<br />';
   }
}
于 2012-12-10T10:47:17.593 回答
0

我不知道为什么,但这解决了我的问题。

我在 $html->find('div',1); 中添加了 '1' 参数

所以工作代码看起来像:

$findDivs = $html->find('div',1);  //add a 1 to the divs. this works as the script now only loops once.

foreach($findDivs as $findDiv) {
  $wordCount = explode(' ', $findDiv->outertext);
  $wordCount = count($wordCount);
  if($wordCount <= 300) {
    $findDiv->outertext = '';
   }
   else {
     echo $findDiv->outertext . '<br />';
  }
}
于 2012-12-10T12:25:55.890 回答