【问题标题】:Element length and index with simple html dom带有简单 html dom 的元素长度和索引
【发布时间】:2013-07-28 09:27:09
【问题描述】:

我正在使用简单的 HTML DOM 来获取某个元素,如下所示:

foreach($html->find('img') as $d) { 
 echo $d->outertext;
}

这将回显所有图像。假设我只需要索引(相对于所有图像)编号为 3、7、14 和 > 15 的图像。有没有办法做这么复杂的事情?

【问题讨论】:

    标签: php arrays indexing simple-html-dom variable-length


    【解决方案1】:

    find 返回一个数组,所以只需使用索引

    $imgs =$html->find('img');
    
    $imgs[3];
    $imgs[7];
    $imgs[14];
    
    for($i=15;$i<count($imgs);$i++){
      $imgs[$i];
    }
    

    【讨论】:

    • $imgs =$html-&gt;find('img'); $imgs[3]; $imgs[7]; $imgs[14]; for($i=15;$i&lt;count($imgs);$i++){ $imgs[$i]; } foreach($html-&gt;find($imgs) as $d) { echo $d-&gt;outertext; } ..........nothing
    • 查看有关元素如何工作的文档,数组是一个对象数组,您必须使用库使用的任何机制来获取实际数据。
    • 它真的能找到任何imgs吗?如果 $imgs 最终为空,您还没有找到任何 img 标签开头。
    • 这是网站nu.nl 有很多图片。我可以使用答案中的代码给他们打电话,但是实现你的代码是行不通的
    • 你不只是复制和粘贴我的代码,你必须为你的代码定制它,它不只是超越你的旧代码,它只是向你展示你将如何访问数组。您必须以某种方式实际使用数组元素。
    【解决方案2】:

    可能最简单的方法是将所有img标签添加到一个数组中,然后您可以从那里根据索引号提取它们。

    【讨论】:

    • 问题是提取,如何在不重复代码的情况下以有效的方式做到这一点?
    【解决方案3】:

    您可以使用$count 变量和in_array() 来完成此操作。在循环之前声明 count 变量,并声明所需 ID 的数组。并且在循环中,可以使用if语句来检查图片ID是否在数组中大于15。

    $count = 1;
    $ids = array(3, 7, 14);
    
    foreach($html->find('img') as $d) { 
    if(in_array($count, $ids) || $count > 15){
    
     echo $d->outertext;
     $count++;    
    
    }
    

    希望这会有所帮助!

    【讨论】:

    • 不返回任何东西
    • @Youss:print_r($html-&gt;find('img')) 输出什么?
    • 好吧,当数组中没有任何内容时,您希望它如何工作?您问题中的 foreach 循环是否输出任何内容?
    • 是的 foreach 循环可以工作,我不知道为什么你的代码不工作,但我认为这不是“简单的 html dom”编码
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多