2013-07-20 77 views
0

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

$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,并立即中断才有效。但为什么$ offer = $ offer [0]不起作用?如果我这样写,这里会出现错误:

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

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

另外一个问题是:是否有可能重写代码,我使用array_filter函数来获取只有一个类“b-offers”的元素?我记得我试着像

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

或种类的一些不同的方法,但对我来说

回答

1

$offer = $offers[0];不起作用,因为array_filter不返回0指数基于阵列没有奏效。它保留了前一个数组的关键字。

+0

啊确实如此。谢谢指出! – Victor

0

why $ offer = $ offers [0] does not work? 我想是因为在这一点上$offers仍然是一个对象,而不是一个数组

得到它只有一个类“B-报价”的元素 尝试$html->find('div.b-offers');

+0

嗯,但是当我跟着DebZer0回答时,我能够得到第一个元素,我只写$ offer = reset($ offers)。那么,我试着去做你所说的话(找到div.b-offer),但我想我得到了像“b-offer another-class”这样的元素。 – Victor