2013-05-30 132 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