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 :

Classer un tableau par ordre alphabétique d'un valeur?


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut Classer un tableau par ordre alphabétique d'un valeur?
    Bonjour,
    Exemple de la forme de mon array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tab[idmembre][nom] = exemple
    $tab[idmembre][points] = 122
     
    $tab[idmembre][nom] = charlie
    $tab[idmembre][points] = 122
     
    $tab[idmembre][nom] = bravo
    $tab[idmembre][points] = 122
    J'aimerai classer mon tableau par nom croissant, mais je n'ai aucune idée de comment faire.

    Est ce que vous pourriez m'aider?

    Je vous remercie d'avance.
    Cordialement,
    Morgan

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Utilise array_multisort comme montré dans l'exemple #3.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372

  4. #4
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Le soucis c'est que je ne vais pas conserver les clé idmembre du tableau

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux utiliser la même technique que dans la FAQ mais en utilisant uasort à la place de usort, qui te conservera les clés

  6. #6
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Merci, je pense que j'ai trouvé un bon exemple.

    Par contre, j'aime pas copier/coller sans comprendre, donc pourriez vous m'expliquer une chose :

    Code php : 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
     
    // Fonction de comparaison
    function cmp($a, $b) {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
     
    // Tableau à trier
    $array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
    print_r($array);
     
    // Trie et affiche le tableau résultant
    uasort($array, 'cmp');
    print_r($array);

    On ne passe aucun argument à la fonction cmp, alors à quoi correspond $a et $a?

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'est uasort qui passe les paramètres $a et $b à la fonction de callback. $a et $b correspondent à deux valeurs à comparer.

  8. #8
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    En fait j'ai utilisé un code plus court :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($tab_result as $key => $row) {
        $t_nom[$key]  = $row['nom'];
        $t_prenom[$key] = $row['prenom'];
    }
    array_multisort($t_nom, SORT_ASC, $t_prenom, SORT_ASC, $tab_result);

    Par contre les explications la fonction array_multisort sont très succincte, Est ce que un de vous pourriez m'expliquer comment la fonction fonctionne.

    Parce que en fait la j'ai 3 tableaux, $t_nom, $t_prenom et $tab_result.

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Dans ton cas, array_multisort va ordonner $t_nom et $_prenom par ordre croissant et recomposer un tableau de résultat dans $tab_result.

    Quand à savoir ce que fait array_multisort dans sa tambouille interne, j'en ai pas la moindre idée, il faudrait regarder les sources de PHP.

  10. #10
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Et si j'ai plusieurs colonne dans mon tableau, par exemple :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab_result[0][nom] = 'untruc'
    $tab_result[0][prenom] = 'unautertruc'
    $tab_result[0][points] = 12

    les colonnes qui ne doivent pas être ordonné comme points vont resté associé au nom et prénom?

  11. #11
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Ce n'est pas pour semer l'embrouille, mais s'il y a 3 "charlie", 2 "bravo" pour des IDs différents ...
    Est-ce possible ? Que ce passe t-il si tel est le cas ?
    (théoriquement tu risques de perdre certains IDs, sauf erreur).

    D'où viennent ces données ?
    Si elles viennent d'une Bdd, ne serait-il pas mieux (surtout plus simple) de le faire à ce niveau, en SQL (un SELECT ... ORDER BY nom ASC, prenom ASC, id ASC) ?

Discussions similaires

  1. [Tableaux] Classer un tableau par ordre alphabétique
    Par s-c-a-r-a dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2008, 23h48
  2. Tri d'un tableau par ordre alphabétique
    Par arouze dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/04/2007, 14h41
  3. Classer les procédures par ordre alphabétique
    Par ouskel'n'or dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/02/2007, 21h22
  4. [MySQL] Classer des résultats par ordre alphabétique
    Par Him dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/07/2006, 14h59
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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