2013-10-09 3 views
0

J'ai essayé de trouver ceci par moi-même avant de demander mais ne peux pas vraiment le comprendre dehors.Tableau bidimensionnel

Ce que j'est une boucle, il est en fait une boucle qui lit les données XML avec simplexml_load_file

maintenant ce fichier XML contient des données que je veux lire et de mettre dans un tableau .. un tableau à deux dimensions en fait .. Ainsi, le fichier XML a un enfant appelé Tag et a un enfant appelé Amount. Le montant est toujours différent, mais le tag est généralement le même, mais peut parfois changer aussi.

Ce que je suis en train de faire est maintenant:

Exemple:

Ceci est l'exemple 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> 

Maintenant, j'ai une boucle qui lit ce, voit ce tag est et additionne les montants. Cela fonctionne avec 2 boucles et deux tableaux différents, et je voudrais tout avoir dans un tableau en boucle simple.

J'ai essayé quelque chose comme ceci:

$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']; 
     } 

puis quelque part dans le code i essayé différentes variations d'ajouter au tableau (contre $ est ce qui compte les montants ensemble):

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

J'ai essayé quelques autres combinaisons que j'ai déjà supprimé car il n'a pas travaillé ..

Ok ceci peut être une question vraiment noob, mais j'ai commencé avec PHP hier et n'ai pas d'ide une façon dont fonctionnent les tableaux multidimensionnels :)

Merci

+0

Donc le résultat final devrait être un tableau avec des balises et leur montant total respectif? –

+0

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

+1

Votre fichier XML est mal formé, les 'items' doivent être fermés avant 'data' –

Répondre

1

voici comment vous pouvez itérer sur l'objet retourné de xml simple:

$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"; 
    } 
} 

donc, pour construire un tableau avec des totaux pour chaque tag:

$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"; 

Ceci brisera horriblement si le changement de schéma ou vous décidez de porter des chaussettes bleues (xml est extrêmement sensible à la couleur). Comme vous pouvez le voir, traiter un enfant xml est fastidieux - encore une décision de conception prise dans une salle de comité :-)

+0

Super merci pour l'aide. Mon code était presque le même, mais il n'a pas fonctionné parce que je n'ai pas fait (chaîne) dans le tableau :). Je pensais que PHP connaîtrait sa chaîne si vous passez des caractères à un tableau/var :) – user1089366