2013-10-09 3 views
0

Я попытался найти это самостоятельно, прежде чем просить, но не могу понять это.Двумерный массив

Что у меня есть цикл, это на самом деле цикл, который считывает данные XML с simplexml_load_file

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

Таким образом, файл XML имеет дочерний элемент с именем Tag и имеет дочерний элемент «Сумма». Сумма всегда отличается, но тег обычно один и тот же, но иногда может меняться.

То, что я пытаюсь сделать сейчас:

Пример:

Это пример XML:

<?xml version="1.0"?> 
<Data> 
<Items> 
    <Item Amount="9,21" Tag="tag1"/> 
    <Item Amount="4,21" Tag="tag1"/> 
    <Item Amount="6,21" Tag="tag2"/> 
    <Item Amount="1,21" Tag="tag1"/> 
    <Item Amount="6,21" Tag="tag2"/> 

</Data> 
</Items> 

Теперь у меня есть цикл, который читает это, видит, что помечать это и суммирует суммы. Он работает с 2 циклами и двумя разными массивами, и я хотел бы иметь все это в одном массиве в одном цикле.

Я пытался что-то вроде этого:

$tags = array(); 
     for($k = 0; $k < sizeof($tags); $k++) 
     { 
       if (strcmp($tags[$k], $child['Tag']) == 0) 
      { 
       $foundTAG = true; 
       break; 
      } 
      else 
       $foundTAG = false; 
     } 


     if (!$foundTAG) 
     { 
      $tags[] = $child['Tag']; 
     } 

, а затем где-то в коде я пробовал различные варианты добавления в массив ($ прилавка, что считается суммам вместе):

$tags[$child['Tag']][$k] = $counter; 
$tags[$child['Tag']][] = $counter; 
$tags[][] = $counter; 

Я попробовал несколько других комбинаций, которые я уже удалил, так как он не работал.

Хорошо, это может быть действительно вопрос о нобе, но я начал с PHP вчера и не знаю как многомерные массивы работают :)

Спасибо

+0

Итак, конечным результатом должен быть массив с тегами и их общая сумма? –

+0

$ tags = array(); for ($ k = 0; $ k Svetoslav

+1

Ваш XML некорректен, «элементы» должны быть закрыты перед «данными» –

ответ

1

это, как вы можете перебрать возвращенный объект от простого XML:

$xml=simplexml_load_file("/home/chris/tmp/data.xml"); 
foreach($xml->Items->Item as $obj){ 
    foreach($obj->Attributes() as $key=>$val){ 
     // php will automatically cast each of these to a string for the echo 
     echo "$key = $val\n"; 
    } 
} 

так, чтобы построить массив сумм для каждого тега:

$xml=simplexml_load_file("/home/chris/tmp/data.xml"); 
$tagarray=array(); 
// iterate over the xml object 
foreach($xml->Items->Item as $obj){ 
    // reset the attr vars. 
    $tag=""; 
    $amount=0; 
    // iterate over the attributes setting 
    // the correct vars as you go 
    foreach($obj->Attributes() as $key=>$val){ 
     if($key=="Tag"){ 
      // if you don't cast this to a 
      // string php (helpfully) gives you 
      // a psuedo simplexml_element object 
      $tag=(string)$val[0]; 
     } 
     if($key=="Amount"){ 
      // same as for the string above 
      // but cast to a float 
      $amount=(float)$val[0]; 
     } 
     // when we have both the tag and the amount 
     // we can store them in the array 
     if(strlen($tag) && $amount>0){ 
      $tagarray[$tag]+=$amount; 
     } 
    } 
} 
print_r($tagarray); 
print "\n"; 

Это сломает ужасно в случае изменения схемы или вы решили носить синие носки (XML является чрезвычайно чувствительным цветом). Как вы видите, проблема с ребенком проблемы - xml - это утомительно - еще одно дизайнерское решение, принятое в комнате комитета :-)

+0

Большое спасибо за помощь. Мой код был почти таким же, но он не работал, потому что я не делал (строку) в массиве :). Я думал, что PHP будет знать свою строку, если вы передадите символы массиву/var :) – user1089366

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