0

サイトからhtmlを取得するためにsimplehtmldomを使用しています。次に、ページ上のすべての 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 が 1 回だけ評価されるようにするためにどのような手法を使用できるかはわかりません。

4

2 に答える 2

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 に答える
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 に答える