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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Trier xml en fonction d'un champ


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Points : 24
    Points
    24
    Par défaut [SimpleXML] Trier xml en fonction d'un champ
    Bonjour à tous!

    Comme indiqué dans le titre, j'aimerais trier un xml en fonction d'un champs. Voici mon xml (que je récupère avec une url) :
    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
    <Election>
      <Tours>
        <Tour>
          <NumTour>1</NumTour>
            <Resultats>
             <Candidats>
              <Candidat>
                <NumPanneauCand>1</NumPanneauCand>
                <NomPsn>HORTALA</NomPsn>
                <NbVoix>1235187</NbVoix>
                <RapportInscrit>2,53</RapportInscrit>
              </Candidat>
              <Candidat>
                <NumPanneauCand>2</NumPanneauCand>
                <NomPsn>MIREPOIX</NomPsn>
                <NbVoix>6938479</NbVoix>
                <RapportInscrit>14,19</RapportInscrit>
              </Candidat>
              <Candidat>
                [...]
    J'aimerais trier chaque section <Candidat> en fonction de la valeur de<NbVoix>.
    Ici, la première section <Candidat> devrait se retrouver sous la seconde car 6938479>1235187

    J'ai une piste avec ce sujet : https://www.developpez.net/forums/d5...xml-trier-xml/

    Dont voici le code inspiré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function sort_by_score($candidat1, $candidat2) {
        if ($candidat1->NbVoix == $candidat2->NbVoix) {
            return 0;
        } else {
            return ($candidat1->NbVoix < $candidat2->NbVoix) ? -1 : 1;
        }
    }
     
    $xml = simplexml_load_file('url');
    $NbrVoix = $xml->xpath('//Candidat');
    usort($NbrVoix, 'sort_by_score');
    foreach ($NbrVoix as $p) {
        echo $p . '<br />';
    }
    Mais ça n'a pas l'air de marcher...
    Merci par avance pour vos suggestions !

    Bonne journée.

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    echo $p ne suffit pas, Si tu veux afficher le nom du candidat par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($NbrVoix as $p) {
        echo (string)$p->NomPsn . '<br />';
    }
    Le bienfait n'est jamais perdu

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Merci pour la réponse,

    malheureusement, il ne 'affiche que "Array()" à croire qu'il ne trouve rien...

  4. #4
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Bizarre ça marche chez moi, peut être un rapport avec ta version de PHP ?
    S'il n'avait rien trouvé, tu n'aurais pas eu l'affichage Array()... Utilise ceci et montre ce que tu obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ($NbrVoix as $p) {
       var_dump($p);
    }
    Le bienfait n'est jamais perdu

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    J'ai la même chose : J'utilise la version 5.6.25 de PHP

  6. #6
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    ça ne devrait pas poser problème avec ta version PHP..
    L'URL est externe à ton site ? Que donnes
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
     var_dump($NbrVoix);
    avant d'y appliquer usort
    Le bienfait n'est jamais perdu

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Zut je n'avais pas compris que xpath demandait le chemin complet jusqu'au noeud, je pensais simplement qu'il le trouvait tout seul...

    Merci à toi!

  8. #8
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    je n'avais pas compris que xpath demandait le chemin complet jusqu'au noeud, je pensais simplement qu'il le trouvait tout seul...
    Que voulez-vous dire? Vous vouliez dire que //Candidat ne soit pas assez "complet"? Non, c'est déjà complet, sans besoin de précision des noeuds intermédiaires. Ce n'est pas une raison d'expliquer
    il ne 'affiche que "Array()"
    dedans la boucle foreach().

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2016
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    J'ai essayé d'indiquer le chemin complet jusqu'au noeud ça a marché...
    Lorsque j'indiquais seulement "Candidats", ça ne marchait pas...

  10. #10
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Il y'a une différence entre les noeuds Candidats et Candidat, comme l'a dit tsuji Candidat seul suffit et c'est ce que tu avais marqué dans ton premier post donc je l'ai utilisé (//Candidat) pour tester chez moi ici
    Le bienfait n'est jamais perdu

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/12/2016, 20h37
  2. Réponses: 4
    Dernier message: 24/10/2014, 16h13
  3. Réponses: 6
    Dernier message: 29/07/2009, 15h31
  4. [SimpleXML] Trier un XML
    Par ac/dc dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 06/07/2008, 22h01
  5. [SimpleXML] Trier le contenu d'un flux XML
    Par Paulux1 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/07/2007, 10h45

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