【问题标题】:two PHPSimpleHtmlDom conditions in one foreach loop一个 foreach 循环中的两个 PHPSimpleHtmlDom 条件
【发布时间】:2013-02-28 12:26:52
【问题描述】:

我正在使用 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 文件以对其进行处理?提前致谢

【问题讨论】:

  • 只是一个建议。使用cURL
  • 你能说得更具体点吗?我该怎么做?
  • 在谷歌和这里搜索。有很多例子。我用它从页面中提取锚链接。您可以查看this 了解有关 cURL 的更多信息。我没有给出解决方案,这只是我之前所说的建议。

标签: php parsing foreach simple-html-dom


【解决方案1】:

假设您有以下 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 结合使用以简化操作。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 2018-07-20
    • 2014-07-29
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多