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 :

Tableau multidimensionnel: lire les valeurs associées à une clé passée en paramètre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut Tableau multidimensionnel: lire les valeurs associées à une clé passée en paramètre
    Bonjour à tous,

    Grâce à XML Reader, je transforme le contenu d'un fichier XML en un ensemble de tableaux PHP.

    Quand je fais print_r() sur ce tableau multidimensionnel, voici un extrait :

    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
     
    Array
    (
        [0] => Array
            (
                [tag] => rootTag
                [childs] => Array
                    (
                        [0] => Array
                            (
                                [tag] => Structure_diplome
                                [vet-infos] => Array
                                    (
                                        [Etape] => 3E17D3
                                    )
     
                                [childs] => Array
                                    (
                                        [0] => Array
                                            (
                                                [tag] => Cours
                                                [elp-infos] => Array
                                                    (
                                                        [element_pedagogique] => 3EUSPT5D
                                                    )
     
                                                [childs] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [tag] => Etudiant
                                                                [etu-infos] => Array
                                                                    (
                                                                        [UID] => gressiel
                                                                        [email] => laurent.gressier@etu.u-cergy.fr
                                                                    )
     
                                                            )
     
                                                        [1] => Array
                                                            (
                                                                [tag] => Etudiant
                                                                [etu-infos] => Array
                                                                    (
                                                                        [UID] => soks
                                                                        [email] => soryanie.sok@etu.u-cergy.fr
                                                                    )
     
                                                            )
     
                                                        [2] => Array
                                                            (
                                                                [tag] => Etudiant
                                                                [etu-infos] => Array
                                                                    (
                                                                        [UID] => inthavoa
                                                                        [email] => alexis.inthavong@etu.u-cergy.fr
                                                                    )

    J'aimerais récupérer toutes les valeurs ayant comme clé [UID] dans l'optique de les comparer avec le résultat d'une requête SQL.

    Le résultat idéal serait :
    [UID] => gressiel
    [UID] => soks
    [UID] => inthavoa
    J'ai donc commencé ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($elp_array[0] as $key => $value)
    	foreach($value[0] as $subkey => $subvalue)
    		foreach($subvalue[0] as $subsubkey => $subsubvalue)
    			echo $subsubkey." => ".$subsubvalue."<br />";
    Voici le résultat :

    tag => Cours
    elp-infos => Array
    childs => Array
    Avez-vous une suggestion ?

    Merci

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    le plus simple est xpath directement sur le xml

    http://php.net/manual/fr/simplexmlelement.xpath.php

  3. #3
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    Je n'utilise pas SimpleXML car le fichier XML est trop lourd : plus de 6 millions de lignes.

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    6 millions de lignes.!!!

    la taille mémoire que prend ce tableau !!!!! suis pas sur que ce soit réalisable sur une serveur web ??

    Il était bien , de faire des filtres dé le départ avec XMLreader

    sinon il faut faire une méthode récursive du type (a noter le passage par reference pour la pauvre mémore !) :

    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
        class ParseArray {
         public $items=array();
         public $key='UID';
     
         public function parse(&$nodes){
           if (is_array($nodes)){
            foreach($nodes as $key=>$node){
                if ($key===$this->key){
                    $this->items[]=(String)$node;
                }
                else {
                    $this->parse($node);
                }
            }
           }
         }
        }
     
        $uid=new ParseArray();
            $uid->key='UID';
            $uid->parse($tab);
     
        print_r( $uid->items );
        unset( $uid );

  5. #5
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    Merci pour cette proposition, mais le résultat n'est pas celui attendu
    Voici ce que j'obtiens :

    Array ( [0] => inthavoa )

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    presque ca !
    il ne trouve que le dernier ?
    comme si tu avais $this->items=.

    ligne 9 a bien $this->items[]= ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/03/2014, 21h54
  2. Réponses: 2
    Dernier message: 22/01/2013, 18h31
  3. [XL-2007] Afficher toutes les valeurs associées à une autre valeur
    Par lecter85 dans le forum Excel
    Réponses: 2
    Dernier message: 19/12/2012, 18h23
  4. Lire les valeur d'une requete (methode utiliser POSTE)
    Par Alghero dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 25/07/2007, 15h09
  5. Lire toutes les valeurs d'une clé
    Par winow dans le forum C++Builder
    Réponses: 3
    Dernier message: 03/02/2006, 18h51

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