用于显示 2 组数据的 Foreach 循环配置

Foreach Loop Configuration for Displaying 2 Sets of Data

我正在使用简单 HTML DOM 从 returns 一页结果的网页获取数据。我想将其格式化为标题,然后是描述。现在我正在使用这个代码:

<?php
include('simple_html_dom.php');
$html = file_get_html('https://www.example.com?q=randomquery');

foreach($html->find('div#resultscontainer') as $data)

//for each title
foreach($data->find('h3') as $title) {
//for each description
foreach($data->find('span.st') as $desc) {
//format code
    echo "<div class='result'>";
    echo $title;
    echo $desc;
    echo "</div>";
    }
}

?>

现在代码给了我一堆标题,以及这些标题下所有可能的描述。截图:

我希望每个标题都分配给一个正确的描述。如果这看起来很简单,我深表歉意,但我是初学者。欢迎大家帮忙,谢谢。

-- 卡梅隆

你的第二个 foreach 检查完整的 HTML 文件,而不是你的 $title 下面的内容。

你应该这样做:

<?php
//for each title
foreach($data->find('h3') as $title) {
//for each description
foreach($title->parent->find('span.st') as $desc) {
//format code
    echo "<div class='result'>";
    echo $title->plaintext;
    echo $desc->plaintext;
    echo "</div>";
    }
}

有关更多信息,请参阅 http://simplehtmldom.sourceforge.net/

中的示例

--编辑:因为你给了我们一个屏幕截图而不是你尝试解析的 html(哈哈 ..!)我只能猜测 html 看起来像什么......我编辑了我的回答是查询h3s的兄弟姐妹..

这样试试:

foreach($html->find('div#resultscontainer') as $data) {
   $titlesAndDescriptions = array();

   // for each title
   foreach($data->find('h3') as $key => $title) {
      $titlesAndDescriptions[$key] = array('title' => $title);
   }

   // for each description
   foreach($data->find('span.st') as $key => $desc) {
      $titlesAndDescriptions[$key]['description'] = $desc;
   }

   foreach ($titlesAndDescriptions as $titleAndDescription) {
      echo "<div class='result'>";
      echo $titleAndDescription['title'];
      echo $titleAndDescription['description'];
      echo "</div>";
   }
}