0

いくつかの 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() 関数を呼び出します。

もう 1 つの質問は、array_filter 関数を使用してクラス「b-offers」を 1 つだけ持つ要素を取得するコードを書き直すことは可能ですか? 次のようないくつかの異なるアプローチを試したことを覚えています

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

または一種の、しかしそれは私にとってはうまくいきませんでした

4

2 に答える 2