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

cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 21 mai 2008 à 18:03 - Dernière réponse : cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention
- 22 mai 2008 à 11:47
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"
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 22 mai 2008 à 11:47
3
Merci
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"

Merci cs_Noizet 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_Noizet
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 21 mai 2008 à 18:54
0
Merci
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
Commenter la réponse de nicomilville
cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 21 mai 2008 à 18:56
0
Merci
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"
Commenter la réponse de cs_Noizet
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 21 mai 2008 à 19:02
0
Merci
a part le DOM non !

a++

<hr />Si la réponse vous convient, pensez : Réponse accèpté !
http://ressource.superforum.fr/index.htm
Commenter la réponse de nicomilville
cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 21 mai 2008 à 19:11
0
Merci
Tu aurais une adresse d'un bon tuto?

"NoiZet"
Commenter la réponse de cs_Noizet
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 21 mai 2008 à 19:13
0
Merci
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
Commenter la réponse de nicomilville
nicomilville 3498 Messages postés lundi 16 juillet 2007Date d'inscription 28 février 2014 Dernière intervention - 21 mai 2008 à 19:14
0
Merci
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
Commenter la réponse de nicomilville
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 21 mai 2008 à 19:47
0
Merci
Hello,

quel est le problème au juste ? Tu ne l'expliques pas du tout, là.
Commenter la réponse de malalam
cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 21 mai 2008 à 20:04
0
Merci
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"
Commenter la réponse de cs_Noizet
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 21 mai 2008 à 20:08
0
Merci
Ta fonction fait déjà du récursif. Donc, où est le pronblème précisément ?
Commenter la réponse de malalam
cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 21 mai 2008 à 20:22
0
Merci
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"
Commenter la réponse de cs_Noizet
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 21 mai 2008 à 20:30
0
Merci
If (false === array_pop(...)) {cas d'arrêt}
Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 21 mai 2008 à 20:30
0
Merci
Ou plutôt :


If (false === @array_pop(...)) {cas d'arrêt}
Commenter la réponse de malalam
cs_Noizet 91 Messages postés mercredi 9 avril 2008Date d'inscription 24 octobre 2008 Dernière intervention - 21 mai 2008 à 20:39
0
Merci
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"
Commenter la réponse de cs_Noizet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.