2013-05-30 85 views
1

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

$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

您正在用'foreach'循环的每次迭代覆盖'$ list'变量。您需要将新元素推送到现有数组的末尾。 – crush

回答

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]; 
} 
+0

感谢您的帮助伴侣 – user2436729

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 ++; 
} 
+0

感谢您的帮助! – user2436729