【问题标题】:Simplehtmldom get first elementSimplehtmldom 获取第一个元素
【发布时间】:2013-07-20 10:36:48
【问题描述】:

当我解析一些 html 并获得一个 html 元素数组时,我想获得第一项。代码如下:

    $url  = getLink($good);
    $html = file_get_html($url);

    $offers = array_filter($html->find('div.b-offers'), function($node) {
        return $node->class == 'b-offers'; // If this only class is set
    });

    // $offer    = $offers[0];  // <---- look here
    foreach ($offers as $offer) {
        $price    = $offer->find('span.b-prices__num', 0)->innertext();
        break;
    }

只有当我立即使用 foreach 和 break 时它才有效。但是为什么 $offer = $offers[0] 不起作用?如果我这样写,这里会报错:

$price = $offer->find('span.b-prices__num', 0)->innertext();

就像在非对象上调用 find() 函数。

另外一个问题是:是否可以重写我使用 array_filter 函数的代码来获取只有一个类“b-offers”的元素?我记得我尝试了一些不同的方法,例如

$html->find('div[class="b-offers"]')

或类似,但它对我不起作用

【问题讨论】:

    标签: php simple-html-dom


    【解决方案1】:

    $offer = $offers[0]; 不起作用,因为array_filter 不返回基于 0 索引的数组。它保留了前一个数组的键。

    【讨论】:

      【解决方案2】:

      为什么 $offer = $offers[0] 不起作用? 我认为因为此时$offers 仍然是一个对象而不是一个数组

      获取只有一个类“b-offers”的元素 试试$html-&gt;find('div.b-offers');

      【讨论】:

      • 嗯,但是当我遵循 DebZer0 的答案时,我能够得到第一个元素,我只写了 $offer = reset($offers)。好吧,我试着按照你说的去做(找到 div.b-offers),但我想我也得到了像“b-offers another-class”这样的元素..
      猜你喜欢
      • 2022-08-17
      • 1970-01-01
      • 2011-01-11
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2016-12-31
      相关资源
      最近更新 更多