2013-07-20 74 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