在一个foreach循环中有两个PHPSimpleHtmlDom条件

时间:2013-02-28 12:26:52

标签: php parsing foreach simple-html-dom

我正在使用PHPSimpleHTMLDOM Parser,我想以某种方式实现具有两个条件的foreach循环。我正在获得我想要的头条新闻,但我也希望获得适用于该特定标题的href。如果我单独为href编写一个嵌套的foreach循环,它会循环太多次并输出许多重复项。这是我的代码:

include_once ('simple_html_dom.php');
$html = file_get_html('somehtml.com');

  foreach ($html->find('ul[class=headlines] li') as $return){
    //if I put another foreach here, too many duplicates
    echo $return;
  }

另一个foreach循环如下所示:

foreach ($html->find('ul[class=headlines] li a') as $href){
  $link = $href->href;
  echo $link;
}

如何将这两个条件放入一个foreach循环中,以便链接对应正确的文章,我可以将它传递给另一个php文件来执行某些操作?提前致谢

1 个答案:

答案 0 :(得分:0)

假设您具有以下HTML结构:

<ul class="headlines">
    <li><a href="http://google.com">Google</a></li> 
    <li><a href="http://yahoo.com">Yahoo</a></li>   
    <li><a href="http://bing.com">Bing</a></li>
</ul>

然后你必须遍历所有的li项并获取与a标签相对应的第n个孩子(在这种情况下它是第一个),就像那样:

foreach ($html->find('ul[class=headlines] li') as $return){
    $a = $return->children(0);
    echo 'Link: ' . $a->href . '<br />';
    echo 'Headline: ' . $a->plaintext . '<br />';
}

请注意,您只需在此处打印$a,而无需单独提取链接和标题。

我建议您使用基于libxml的某些原生扩展程序以获得更好的性能,例如DOM。您还可以将其与XPath结合使用,以简化操作。