2009-12-30 3 views
0

Je veux transformer le tableau 'values' créé par xml_parse_into_struct() en un ensemble de tableaux imbriqués que je peux parcourir de façon récursive. Ceci est pour une classe XML très simple qui recherche hiérarchisés le document comme ceci:Est-ce une idée terrible de générer beaucoup de tableaux imbriqués en PHP?

$xml_data = " 
<sometag> 
    <someothertag> 
     <somedata>foo</somedata> 
    </someothertag> 
    <someothertag> 
     <somedata>bar</somedata> 
    </someothertag> 
</sometag> 
<sometag> 
    <someothertag> 
     <somedata>baz</somedata> 
    </someothertag> 
</sometag>"; 

$parser = new Xml_Data($xml_data); 
$somedata = $parser->find('sometag')->find('someothertag')->results(); 
// 0: "somedata" 
// "value": "foo" 
// 1: "somedata" 
// "value": "bar" 

// etc. 

stocker dans des tableaux associatifs imbriqués serait beaucoup plus facile de travailler avec de garder une trace de chaque balise d'ouverture et de fermeture et ce qui niveau 'ils se produisent à xml_parse_into_struct sorties similaires. Mais je me demande - si le document devient assez volumineux, cet énorme tableau sera-t-il horrible? Devrais-je abandonner et traverser la stupide version du tableau que PHP me donne?

+0

Je ne dirais pas que c'est "dieu horrible". Pas si "élégant" peut-être. –

+0

moins élégant que d'itérer sur un tableau tout en gardant la trace de votre niveau, de l'élément sur lequel vous êtes, si vous trouvez des balises fermantes, etc., plutôt que de parcourir récursivement des tableaux imbriqués? –

+0

Haha, ne vous méprenez pas. Je dis juste "dieu horrible" est plutôt extrême pour décrire votre mise en œuvre proposée. Ne pas le comparer à d'autres choses. : P –

Répondre

2

Pour un meilleur effet, vous auriez peut-être voulez faire

$xml['sometag'][0]['someothertag'][1]['somedata'][0] # bar 

Lorsque le tableau a deux dimensions pour chaque niveau. C'est-à-dire, des paires de valeurs de variable/tagindex.

Ceci est à la fois évolutif et lisible.

+0

génial, c'est mieux que comment J'ai d'abord pensé à le faire. Il s'avère qu'une bibliothèque existe déjà pour cela, que je ne connaissais pas.Mais cela répond à ma question sur les tableaux d'imbrication (bien que je suppose qu'un autre problème potentiel serait un débordement de pile en récursifant un tableau très profondément imbriqué) –

+0

Si votre fichier xml a 1000 niveaux, je dirais que votre fichier xml est le problème, pas le débordement de pile résultant. ;) –

+0

vrai, je n'ai pas le fichier xml, il provient d'un tiers –

0

Je ne suis pas sûr de vos besoins exacts, mais je pense que vous pouvez utiliser là array_walk_recursive. Pourquoi ne pas utiliser SimpleXML pour cela?

+0

oui, mais alors je dois transformer le tableau de 'xml_parse_into_struct' - récursif est ma préférence, mais je ne sais pas si faire de cette façon, il y aura des échecs de cache et des débordements de pile –

+2

alors vous devriez utiliser SimpleXML je suppose. – Sarfraz

3

Le même modèle d'imbrication, mais des objets à la place des tableaux.

+0

Je suis si triste que je n'ai pas trouvé cela plus tôt –

+2

Ne devriez-vous pas être heureux aussi bien que maintenant vous l'avez trouvé? :) –

+0

bien, oui, mais triste au sujet du temps perdu haha. –

Questions connexes