1

* 私が望むのは、DOM が "foreach" ループで 1 行ずつ結果を出力するのではなく、結果を配列に格納することです。つまり、"[0] 16GB USB スティック" "[1] コンピューター モニター" [2] ワイヤレス キーボードなどこれまでのところ、これは持っていますが、for each ループの最後の値しか格納していません。助けてください! *

$html = new DOMDocument();
@$html->loadHtmlFile('some online shop');
$xpath = new DOMXPath($html);
$nodelist = $xpath->query( "//div[@class='productname']/p" );

foreach ($nodelist as $n)
    {
        $value = $n->nodeValue;
        $list = array($value);
    }

echo $list[0];
4

2 に答える 2

6

これは、各ループでオーバーライドしているためです。配列を作成し、その配列に追加します。

$list = array();

foreach ($nodelist as $n)
{
    $value = $n->nodeValue;
    $list[] = $value;
}

// Check there's at least one item in the array before accessing it
if (count($list) > 0)
{
    echo $list[0];
}
于 2013-05-30T13:37:07.180 に答える
1

PHPで配列がどのように機能するかを調べる必要があります。あなたが間違っているのは、配列に情報を追加するのではなく、反復ごとに配列を再宣言していることです。

$list = array();

foreach ($nodelist as $n) {
    $list[] = $n->nodeValue;
}

var_dump($list);

説明:

[]基本的には、この配列にアイテムを追加し、キーを自動生成することを意味します。

私が書いた foreach はこれと同等です:

$i = 0;
foreach ($nodelist as $n) {
    $list[$i] = $n->nodeValue;
    $i ++;
}
于 2013-05-30T13:36:19.103 に答える