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 :

Tri alphabétique dans une liste déroulante


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut Tri alphabétique dans une liste déroulante
    bonjour,

    je charge des données à partir d'un fichier xml en utilisant simpleXML.
    le fcihier xml a la structure suivante:

    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
     
    <?xml version="1.0" encoding="ISO8859-1"?>
    <data>
    <codepays code="AF">
    <devise dev="AFA">
    <langue val="fr"><continent>Asie</continent><pays>AFGHANISTAN</pays><monnaie>(-> AFN)</monnaie></langue>
    <langue val="en"><continent>Asia</continent><pays>AFGHANISTAN</pays><monnaie>(-> AFN)</monnaie></langue>
    </devise>
    </codepays>
    <codepays code="AF">
    <devise dev="AFN">
    <langue val="fr"><continent>Asie</continent><pays>AFGHANISTAN</pays><monnaie>Afghani</monnaie></langue>
    <langue val="en"><continent>Asia</continent><pays>AFGHANISTAN</pays><monnaie>Afghani</monnaie></langue>
    </devise>
    </codepays>
    <codepays code="ZA">
    <devise dev="ZAR">
    <langue val="fr"><continent>Afrique</continent><pays>AFRIQUE DU SUD</pays><monnaie>Rand</monnaie></langue>
    <langue val="en"><continent>Africa</continent><pays>SOUTH AFRICA</pays><monnaie>Rand</monnaie></langue>
    </devise>
    </codepays>
    </data>
    Dans mon formulaire, j'affiche les pays par continent.
    Je voudrai trier la liste des pays par ordre alphabétique par continent.
    je ne sais pas comment faire.

    Le code de mon formulaire est le suivant :

    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
     
    <?php
    $lalangue=((isset($lalangue))?$lalangue:"fr");
     
    //chargement du fichier xml une fois pour toutes les devises
    $xmlpays=simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/monnaiespays.xml');
     
    $continent = array('Afrique', 'Amérique du Nord', 'Amérique du Sud', 'Asie', 'Europe', 'Océanie');
     
    <form name="formulaire" method="post">
    <p><input type="text" name="montant" class="montant_devise" value="<?php print($montant); ?>"></p>
    <p><select name="codepays1" class="select_devise">
    <?php 
     
    for ($i=0; $i<6; $i++) {
      print("<optgroup label=\"".$continent[$i]."\">");
      foreach($xmlpays->codepays as $myvar) {
        $codepays = $myvar[@code];
        foreach($myvar->children() as $devise) {
          $dev=(string)$devise[@dev];
          foreach($devise->children() as $langue) {
    	if(utf8_decode($langue[@val]) == $lalangue) {
    	  if(utf8_decode($langue->continent) == $continent[$i]) {
    	    print("<option value=\"".$codepays."\" ".(($codepays1==$codepays)?"selected=\"selected\"":"").">".$codepays." - ".utf8_decode($langue->pays)."</option>");
    	  }
    	}
          }
     
        }
      }
      print("</optgroup>");
    }
    ?>
    </select></p>
    </p>
    </form>
    quelqu'un aurait-il une solution ?

    merci

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Par défaut
    Il faudrait faire un tableau multidimention style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conti_pays = array( 'Afrique'=>array( 'mali', 'maroc', '' ), 'Asie'=>array( 'Chine', 'Inde', '' ), );
    et appliquer cette fonction : http://fr2.php.net/manual/fr/functio...-multisort.php


    ps : pour fusionner les tableaux $continents et $pays une boucle foreach() et la fonction array_push() pour ajouter les pays.

  3. #3
    Membre confirmé Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut
    Citation Envoyé par LDDL Voir le message
    Il faudrait faire un tableau multidimention style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conti_pays = array( 'Afrique'=>array( 'mali', 'maroc', '' ), 'Asie'=>array( 'Chine', 'Inde', '' ), );
    et appliquer cette fonction : http://fr2.php.net/manual/fr/functio...-multisort.php


    ps : pour fusionner les tableaux $continents et $pays une boucle foreach() et la fonction array_push() pour ajouter les pays.
    Merci pour ta réponse.
    J'ai créé un tableau de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tab[$continent][$pays] = array($langue,$codepays,$devise,$monnaie);
    je ne sais pas quels paramètres utiliser avec la fonction array_multisort pour trier mon tableau par ordre alphabétique de continent puis par ordre alphabétique de pays.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Par défaut 2 c'est mieux qu'un
    Peut être devrais tu cinder tes infos en 2 tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conti_pays = array( 'Afrique'=>array( 'mali', 'maroc', '' ), 'Asie'=>array( 'Chine', 'Inde', '' ), );
    utiliser asort() pour ton trie.
    http://fr2.php.net/manual/fr/function.asort.php

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pay_info = array( 'mali'=>array( $langue, $codepays, $devise, $monnaie), );

  5. #5
    Membre confirmé Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Par défaut la solution
    bonjour

    j'ai résolu mon problème en créant un tableau différent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $tab[] = array('continent' => $continent, 
                  'pays' => $pays, 
                  'data' => array($langue, $codepays, $dev, $monnaie));
    ensuite je transforme mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($tab as $key => $row) {
      $tricontinent[$key] = $row['continent'];
      $tripays[$key] = $row['pays'];
      $tridata[$key] = $row['data'];
    }
    et enfin, un tri avec array_multisort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array_multisort($tricontinent,SORT_STRING,SORT_ASC,$tripays,SORT_STRING,SORT_ASC,$tridata,SORT_ASC, $tab);
    et là ça fonctionne !

    merci pour vos réponses

    Floopi51.

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

Discussions similaires

  1. Tri alphabétique d'une liste déroulante
    Par mimine11 dans le forum Débuter
    Réponses: 2
    Dernier message: 31/07/2012, 10h15
  2. tri dans une liste déroulante
    Par paolo2002 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 27/02/2008, 12h45
  3. Ordre alphabétique dans une liste déroulante
    Par Z[ee]k dans le forum Access
    Réponses: 2
    Dernier message: 30/05/2006, 15h02
  4. tri alphabétique d'une liste déroulante
    Par imeys dans le forum Access
    Réponses: 4
    Dernier message: 17/05/2006, 22h28
  5. Rajouter "Tous" dans une Liste Déroulante
    Par smirold dans le forum IHM
    Réponses: 7
    Dernier message: 25/10/2004, 13h29

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