1

YEAR、RATING 列の URL をクエリしており、これら 2 つをデータベースに挿入したいと考えています。例:YEAR RATING 1992 9.2 2000 9 1999 8 . . . . . . . .

だから、私は次のようなスクリプトを書いています:

$url = 'BLA BLA ';
$data = file_get_contents($url);
$dom = new Zend_Dom_Query($data);
$year = $dom->query('.secondaryInfo');
$rating = $dom->query('.ratingColumn');

それらの両方をデータベースに挿入する方法???

for ( .... What do I have to write here?)

$parse = new Application_Model_Parse();
$parse->createImdb(array(
'rating' => What do I have to write here?
'year' => What do I have to write here?
));

どんな助けでも役に立ちます。

ありがとうございました

4

1 に答える 1

1

http://framework.zend.com/manual/1.12/en/zend.dom.query.htmlで説明されているように

ドキュメントを作成したら、query()またはqueryXpath()メソッドを使用できます。各メソッドはZend_Dom_Query_Result、一致するノードを持つオブジェクトを返します。

そしてさらに

前述のように、は と のZend_Dom_Query_Result両方を実装Iteratorしているため、関数だけでなくループでCountableも使用できます。foreach()count()

この場合、さまざまなIterator メソッドがPHP のネイティブ DOMElementsを返します。つまり、要素のテキスト コンテンツにそのプロパティを介してアクセスできますnodeValue

Result オブジェクトにアイテムが 1 つしかないと仮定して、試してください。

$parse->createImdb(
    array(
        'rating' => $rating->current()->nodeValue
        'year' => $year->current()->nodeValue
    )
);

Iterator の使用に不安がある場合は、次を使用できます。

まあ、イテレータを配列にコピーしてから、代わりにそれを使用します。

$rating = iterator_to_array($rating);
$year = iterator_to_array($year);
$parse->createImdb(
    array(
        'rating' => $rating[0]->nodeValue
        'year' => $year[0]->nodeValue
    )
);

複数の結果がある場合は、 MultipleIteratorを使用してそれらを反復処理します

$ratingsAndYears = new MultipleIterator();
$ratingsAndYears->attachIterator($rating);
$ratingsAndYears->attachIterator($year);

foreach ($ratingsAndYears as $ratingAndYear) {
    $parse = new Application_Model_Parse();
    $parse->createImdb(
        array(
            'rating' => $ratingAndYear[0]->nodeValue
            'year' => $ratingAndYear[1]->nodeValue
        )
    );

Zend_Dom_Query余談ですが、は PHP のネイティブ DOM 拡張機能の薄いラッパーにすぎません。XPathを知っていれば、それが提供する W3 セレクターのクエリは実際には必要なく、DOM だけですべて実行できます。

于 2013-11-05T11:09:45.960 に答える