IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Parcourir un tableau situé dans une structure complexe


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut [Tableaux] Parcourir un tableau situé dans une structure complexe
    Bonjour
    J'ai un "tableau" comme ca (qui est en fait plutot un objet):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    stdClass Object
    (
        [source] => files/popmusic.xml
        [root] => stdClass Object
            (
                [name] => product
                [textValue] => 
                [attributes] => Array
                    (
                        [upc] => 00606949350727
                    )
     
                [children] => Array
                    (
                        [0] => stdClass Object
                            (
                                [name] => type
                                [textValue] => new
                            )
     
                        [1] => stdClass Object
                            (
                                [name] => territory
                                [textValue] => US
                        [...]
                    )
          )
    )
    Comment faire pou accéder au tableau children pour afficher type = new par exemple.
    J'ai essayé avec une boucle foreach mais elle plante en arrivant sur "root".

    Merci

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux nous montrer le code que tu as fait ?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    En fait j'ai repris une partie du code se trouvant dans ce tutorial: http://eusebius.developpez.com/php5dom/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    function index($fichier) {
    		$tab = $this->fileToObject("files/".$fichier);
    		debug($tab);		
    	}
     
    function getElement($dom_element, $object_element) {
     
    		// récupération du nom de l'élément
    		$object_element->name = $dom_element->nodeName;
    		echo $dom_element->nodeName;
     
    		// récupération de la valeur CDATA,
    		// en supprimant les espaces de formatage.
    		@$object_element->textValue = trim($dom_element->firstChild->nodeValue);
    		echo $object_element->textValue;
     
    		// Récupération des attributs
    		if ($dom_element->hasAttributes()) {
    			$object_element->attributes = array();
    			foreach($dom_element->attributes as $attName=>$dom_attribute) {
    				$object_element->attributes[$attName] = $dom_attribute->value;
    				echo $dom_attribute->value;
    			}
     
    		}
     
    		// Récupération des éléments fils, et parcours de l'arbre XML
    		// on veut length >1 parce que le premier fils est toujours
    		// le noeud texte
    		if ($dom_element->childNodes->length > 1) {
    			$object_element->children = array();
    			foreach($dom_element->childNodes as $dom_child) {
    				if ($dom_child->nodeType == XML_ELEMENT_NODE) {
    					$child_object = new stdClass();
    					$this->getElement($dom_child, $child_object);
    					array_push($object_element->children, $child_object);
    				}
    			}
    		}
    	}
     
    	function fileToObject($fileName) {
     
    		// création du nouvel objet document
    		$dom = new DomDocument();
     
    		// chargement à partir du fichier
    		$dom->load($fileName);
     
     
     
    		// création de l'objet résultat
    		$object = new stdClass();
     
    		// on référence l'adresse du fichier source
    		$object->source = $fileName;
     
    		// on récupère l'élément racine, on le met dans un membre
    		// de l'objet nommé "root"
    		$root = $dom->documentElement;
    		$object->root = new stdClass();
     
    		// appel d'une fonction récursive qui traduit l'élément XML
    		// et passe la main à ses enfants, en parcourant tout l'arbre XML.
    		$this->getElement($root, $object->root);
     
    		return $object;
    	}

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($tab->root->children as $elt) {
        printf("Type : %s, valeur : %s", $elt->name, $elt->textValue);
    }

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Ah oui tien ca marche.
    Je ne savais pas qu'on pouvait mettre plusieurs flèches dans un foreach.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tableau unidimensionnel dans une structure
    Par Helices dans le forum C++/CLI
    Réponses: 7
    Dernier message: 30/06/2014, 14h41
  2. Réponses: 7
    Dernier message: 17/01/2012, 17h01
  3. Réponses: 11
    Dernier message: 09/02/2010, 11h42
  4. parcourir un tableau dynamique dans une structure
    Par brunolekid dans le forum C
    Réponses: 4
    Dernier message: 23/10/2009, 15h24
  5. Réponses: 7
    Dernier message: 21/12/2005, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo