Simplehtmldom得到第一个元素

时间:2013-07-20 10:36:49

标签: php simple-html-dom

当我解析一些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 = $ offer [0]不起作用?如果我这样写,这里会出错:

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

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

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

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

或者那种,但它对我不起作用

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

为什么$ offer = $ offers [0]无效? 我想因为此时$offers仍然是一个对象而不是一个数组

获取只有一个班级的元素&#34; b-offers&#34; 试试$html->find('div.b-offers');