2013-09-22 62 views
0

我在這個格式的XML:關聯數組和XML

<row typeID="5" volume="15" orders="6"/> 
<row typeID="5" volume="2" orders="2"/> 
<row typeID="6" volume="9" orders="5"/> 
<row typeID="6" volume="8" orders="2"/> 
<row typeID="1" volume="2" orders="2"/> 
<row typeID="2" volume="162" orders="13"/> 

我使用這個:

$volumes = array(); 
foreach ($xml -> result -> rowset-> row as $row) 
{ 
    $id = $row['typeID']; 
    $volume = $row['volume']; 
    $volumes[(string)$id] = $volumes[(string)$id] + $volume; 
} 

但是我對一些ID的....

收到此錯誤
Notice: Undefined offset: 6 

我不明白那是什麼問題?

這就是我與$卷陣列做:

while($element = each($volumes)) 
{ 
    $daily = $element['value']/10;    
    if ($daily > 30) { 
     echo "typeid=" . $element[ 'key' ]; 
    } 
} 
+0

是什麼'$ volumes'? – srain

+0

它是一個關聯數組,它是數組構建的地方。它只給出特定ID的通知。例如5和1會工作,但2和6會拋出通知。它們都存在於XML中,正在抓取數據。 – dai007uk

+0

你想通過'$ volumes [(string)$ id] = $ volumes [(string)$ id] + $ volume;'? – srain

回答

0

看來你是想通過ID計算總和,使用下面的代碼,這將消除警告。

<?php 
$volumes = array(); 
foreach ($xml -> result -> rowset-> row as $row) 
{ 
    $id = (string)$row['typeID']; 
    $volume = $row['volume']; 
    if (!isset($volumes[$id])) 
    { 
     $volumes[$id] = 0; 
    } 
    $volumes[$id] = $volumes[$id] + $volume; 
} 

我想你可能需要用它來使用$volumes

foreach ($volumes as $id => $value) 
{ 
    $daily = $value/10; 
    if ($daily > 30) 
    { 
     echo "typeid=" . $id; 
    } 
} 
+0

優秀,那已經解決了這個問題!我知道我需要在某處添加!isset,但是我試過的每個地方只是拋出了更多的錯誤。我認爲$卷[$ id] = $卷[$ id] + $卷;基本上會轉化爲$卷[$ id] = 0 + $卷;但顯然不是:) – dai007uk

+0

我給答案添加了一些代碼,希望對你有所幫助。 – srain

0

嘗試讀取不存在從$volumes數組鍵觸發此通知。您在第一次分配前嘗試閱讀$volumes[(string)$id]。良好的做法是使用isset()

foreach ($xml -> result -> rowset-> row as $row) { 
    $id = (string) $row['typeID']; 
    $volume = $row['volume']; 
    if (isset($volumes[$id])) { 
    $volumes[$id] = $volumes[$id] + $volume; 
    } else { 
    $volumes[$id] = $volume; 
    } 
} 

快速和骯髒的方法是禁用通知:error_reporting(E_ALL & ~E_NOTICE);