2013-09-22 2 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; 
} 

Однако я получаю эту ошибку на некоторые из идентификаторов ....

Notice: Undefined offset: 6 

Я не понимаю, что это проблема ?.

Это то, что я делаю с массивом томов $:

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

что '$ volumes'? – srain

+0

Это ассоциативный массив, в котором построен массив. Он дает это уведомление только для определенных идентификаторов. Например, 5 и 1 будут работать, но 2 и 6 будут бросать уведомление. Они оба присутствуют в XML, данные захватываются. – dai007uk

+0

Что вы хотите достичь с помощью '$ томов [(string) $ id] = $ томов [(string) $ id] + $ volume;'? – srain

ответ

0

Кажется, что вы хотите, чтобы вычислить сумму по идентификатору, используя код, приведенный ниже, это устранит предупреждение.

<?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 где-то, но везде я пытался просто бросить еще больше ошибок. Я думал, что $ volume [$ id] = $ томов [$ id] + $ volume; в основном переводится в $ volume [$ id] = 0 + $ volume; но, очевидно, не :) – 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);

Смежные вопросы