1

* 我想要的是,对于 DOM,而不是在“foreach”循环中逐行打印结果,而是将其存储在一个数组中......所以它应该看起来像一个列表,即“[0] 16GB USB 记忆棒" "[1] 电脑显示器" "[2] 无线键盘" 等等 到目前为止我有这个,但它只存储每个循环的最后一个值..请帮忙!*

$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 回答