* 我想要的是,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];
答案 0 :(得分: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];
}
答案 1 :(得分: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 ++;
}