0

我正在使用 PHPSimpleHTMLDOM 解析器,我想以某种方式实现一个具有两个条件的 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 文件以对其进行处理?提前致谢

4

1 回答 1

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项目并获取与标签对应的第 n 个孩子a(在本例中是第一个),如下所示:

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 结合使用以使事情变得更简单。

于 2013-02-28T13:15:46.790 回答