Parcourir un tableau multidimensionnel et creer le XML correspondant [Résolu]

Signaler
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
-
cs_Noizet
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
-
Hello,
J'ai un tableau multidimensionnel sous cette forme :

object(stdClass)#2 (16) {
  ["id"]=>
  string(5) "text2"
  array(3) {
    [0]=>
    object(stdClass)#3 (17) {
      ["id"]=>
      string(5) "text3"
    }
    [1]=>
    object(stdClass)#4 (17) {
      ["id"]=>
      string(5) "text4"
    }
    [2]=>
    object(stdClass)#5 (17) {
      ["id"]=>
      string(5) "text5"
    }
  }
}

et j'aimerai le parcourir et créer la strucutre XML correspondante :
<text2>
<text3></text3>
<text4></text4>
<text5></text5>
</text2>

J'ai fait une fonction récurisve pour parcourir mon tableau :

function parcoursTableauEtCreerXML($tableau){
  var_dump($tableau);
  //Création de nombre fichier xml :
  $xml = new creer_xml('fichierXML','ISO-8859-2');
  //parcour le tableau
  foreach ($tableau as $cle=>$valeur)
  {
    //si l'un des éléments est lui même un tableau
    // alors on applique la fonction à ce tableau
    if(is_array($valeur)) {
      //On creer un noeud ouvert <nomNoeud>
      $xml->creerNoeud('enregistrement');


      // on effectue la récursivité
      parcoursTableauEtCreerXML($valeur);
      } else {
        // si ce n'est pas un tableau
        // on creer un noeud fermé <nomNoeud></nomNoeud>
        $xml->CreerNoeudContenu('test',"");
      }
    }
    //Une fois le tableau parcouru on creer le fichier XML
   $xml->creerlefichier();
}

(La classe XML fonctionne très bien)

Le problème c'est que je parcours faux mon tableau, mais je ne vois pas vraiment comment faire! Est-ce que qqun à une idée? Est-ce qu'on doit mettre un cas d'arrêt comme en java?

"NoiZet"
A voir également:

14 réponses

Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
3
Voilà j'ai trouvé la solution :
function recursive($tab){
  $fichierFinal;
   foreach($tab as $cle=>$valeur){
      if(isset($valeur->id) && is_array($valeur->id)){
        $fichierFinal .= "quelque chose".recursive($valeur->id);
      }else{
        $fichierFinal .= "quelque chose d'autre";
      }
    }
    return $fichierFinal;
}

"NoiZet"
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
3
Car j'ai lu (je sais plus ou), qu'il était possible que le DOM ne sois pas prit en compte!
Mais sinon, tu vois comment parcourir mon tableau multi, qui peut varier d'une fois à l'autre?

"NoiZet"
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
a part le DOM non !

a++

<hr />Si la réponse vous convient, pensez : Réponse accèpté !
http://ressource.superforum.fr/index.htm
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
3
Tu aurais une adresse d'un bon tuto?

"NoiZet"
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
php.net

www.php.net/dom

a ne pas confondre avec l'extension simple_xml !

a++

<hr />Si la réponse vous convient, pensez : Réponse accèpté !
http://ressource.superforum.fr/index.htm
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
Salut,

question intéressante, par contre, je ne vois pas pourquoi tu a créé des fonction et une class xml alors qu'il serait tellement plus simple d'utiliser le DOM !

createTextNode
appendChild
removeChild
etc...

a++

<hr />Si la réponse vous convient, pensez : Réponse accèpté !
http://ressource.superforum.fr/index.htm
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25
désolé mauvaise adresse !

http://www.php.net/manual/fr/book.dom.php

a++

<hr />Si la réponse vous convient, pensez : Réponse accèpté !
http://ressource.superforum.fr/index.htm
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Hello,

quel est le problème au juste ? Tu ne l'expliques pas du tout, là.
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
3
J'aimerai parcourir mon tableau mutlidimensionnel de facon récurisve car la dimension de mon tableau peut varier et creer un xml qui correspond à la strucutre. Mon problème est que je ne sais pas vraiment comment faire pour parcourir mon tableau

"NoiZet"
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Ta fonction fait déjà du récursif. Donc, où est le pronblème précisément ?
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
3
Ben en faite, je le fais faux, car je ne sais pas komen mettre le cas d'arret et j'ai une erreur array_pop

"NoiZet"
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
If (false === array_pop(...)) {cas d'arrêt}
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
18
Ou plutôt :


If (false === @array_pop(...)) {cas d'arrêt}
Messages postés
91
Date d'inscription
mercredi 9 avril 2008
Statut
Membre
Dernière intervention
24 octobre 2008
3
L'autre problème avec cette fonction c'est qu'il rentre uniquement dans le premier tableau et ne vas pas dans les autres (ceux en rose) et je ne sais pas pourquoi!

object(stdClass)#2 (16) {
  ["id"]=>
  string(5) "text2"
  array(3) {
    [0]=>
    object(stdClass)#3 (17) {
      ["id"]=>
      string(5) "text3"
    }
    [1]=>
    object(stdClass)#4 (17) {
      ["id"]=>
      string(5) "text4"
    }
    [2]=>
    object(stdClass)#5 (17) {
      ["id"]=>
      string(5) "text5"
    }
  }
}

"NoiZet"