Alors vous voulez convertir cette structure de données en arbre :
contenu
ducode
encoreducode
encore du code
Dans une sorte de tableau plat :
Array
(
[0] => "contenu"
[1] => ""
[2] => "ducode"
[3] => "encoreducode"
[4] => " encore du code "
)
serait délicat. Il s'agit d'un problème classique en informatique qui n'a pas beaucoup de bonnes réponses. La structure arborescente fournit des informations sur les relations entre les entrées qu'un tableau ou une liste plat ne possède pas. Toute tentative de transformer l'arbre en une liste perdra ce contexte référentiel.
Vous pourriez soit exploser la chaîne de caractères et ensuite la parcourir en gardant une trace des éléments parents ou en les ignorant (voir tag2). Si je devais faire quelque chose avec le XML, je le placerais dans un SimpleXMLElement, qui produirait quelque chose comme ceci :
SimpleXMLElement Object
(
[tag] => contenu
[tag2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[ref] => 333
)
[code] => Array
(
[0] => ducode
[1] => encoreducode
)
)
[tag3] => encore du code
)
Avec cela, je peux le parcourir avec foreach et trouver la balise et son contenu. Je peux tester pour voir si le contenu est une chaîne de caractères ou des éléments enfants et le cas échéant les parcourir. Une fonction récursive résoudrait assez facilement ce problème. Le plus gros problème est de savoir comment représenter les données une fois aplaties.
Si vous les aplatissez dans l'array que j'ai fourni précédemment, les balises parent et enfant perdent toute relation implicite entre elles. Si ce n'est pas un problème, super. Écrivez la fonction récursive et vous avez terminé. Voici un pseudocode :
function walking($contenu)
$out est le morceau de tableau qui est retourné
foreach $contenu as $balise->$donnees
si $valeur est un SimpleXMLElement
fusionner $donnees[@attributes] en une chaîne $attributs
ajouter <$balise $attributs> à la fin de $out
vous devrez peut-être supprimer @attributes avant de récurer.
récurser dans walking($donnees) et ajouter le tableau retourné à la fin de $out
si $valeur est un tableau
ajouter <$balise> à la fin de $out
récurser dans walking($donnees) et ajouter le tableau retourné à la fin de $out
si $valeur est une chaîne de caractères
ajouter <$balise>$donnees à la fin de $out
après avoir bouclé à travers $contenu, retourner $out.
Cependant, si vous devez somehow keep those relationships intact, vous avez un peu un problème et devrez concevoir un système pour cela