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

时间:2015-05-13 06:51:42

标签: php loops foreach format

我使用Simple HTML DOM从返回结果页面的网页获取数据。我想将其格式化为标题,然后描述。现在我正在使用这段代码:

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

?>

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

Error explained in question. More titles do the same lower on the webpage.

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

- 卡梅隆

2 个答案:

答案 0 :(得分:0)

您的第二个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的兄弟姐妹。

答案 1 :(得分:0)

试试这样:

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