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] Trier tableau multidimensionnel avec array_multisort


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Points : 529
    Points
    529
    Par défaut [Tableaux] Trier tableau multidimensionnel avec array_multisort
    Bonjour

    J'aimerai trier un tableau multidimensionnel (resultat d'une requete) selon le nombre de commentaires.

    Si je recupere simplement le resultat de ma requête, j'obtiens le tableau suivant :
    Code X : 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
    Array
    (
        [0] => Array
            (
                [id] => 1
                [prenom] => Jean
                [nb_com] => 9
            )
    
        [1] => Array
            (
                [id] => 2
                [prenom] => Paul
                [nb_com] => 3
            )
    	[2] => Array
            (
                [id] => 3
                [prenom] => Sophie
                [nb_com] => 14
            )
    
    )

    J'ai touvé en recherchant sur le forum qui'l existait la fonction array_multisort
    mais je ne comprends comment l'utiliser.
    Il y a un exemple qui illustre un cas similaire au mien (Exemple 386. Classer les résultats d'une base de données). Il est dit qu'il faut un tableau de colonne.
    J'ai donc changé ma manière de récuperer le resultat de ma requete pour avoir :
    Code X : 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
    Array
    (
        [idx] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [prenom] => Array
            (
                [0] => Jean
                [1] => Paul
                [2] => Sophie
            )
    
        [nb_com] => Array
            (
                [0] => 9
                [1] => 3
                [2] => 14
            )
    )

    J'espère avoir été assez clair, et merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    je te conseil d'utiliser MySQL pour les tries (ce que j'ai fait personnellement, c'est plus simple, et ça limite le code)

    quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... ORDER BY 'commentaire' DESC, 'nom' ASC
    ça te tirera par commentaires (du plus grand au plus petit), puis si c'est égale, par nom (dans l'ordre alphabétique)

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je suis 100% d'accord avec juJuv51.
    Toutefois, je te suggere de t'orienter vers usort plutot que array_multisort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function tri_commentaires($a, $b) {
       return strnatcmp($a['nb_com'], $b['nb_com']);
    }
    usort($ton_tableau, 'tri_commentaires');

  4. #4
    Membre confirmé
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Points : 529
    Points
    529
    Par défaut
    Oui c'est ce que j'avais tenté dans un premier temps mais j'avais un soucis avec ma requête.

    Et j'aimerai trier le tableau par le nombre de commentaire, et ensuite trier le tableau de départ par pseudo et afficher les 10 premiers résultats.

    Alors, est-il plus coûteux de faire deux requêtes, ou une seule et de travailler le tableau avec les fonctions de tri ?

    nb: je me suis penché de nouveau sur ma requête et j'ai réussi à obtenir un premier tableau (je devais pas être très en forme hier ^^)

    Néanmoins, la question demeure, 2 requêtes ou tri d'un tableau ? Merci.

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    De maniere générale, ,'hésite pas à faire faire par mysql son boulot. MySQL est fait pour trier.
    Pour ton problème, je vois bien une seule requete :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, prenom, nb_com
    FROM ma_table
    ORDER BY nb_com DESC, prenom ASC
    LIMIT 10

  6. #6
    Membre confirmé
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Points : 529
    Points
    529
    Par défaut
    Merci. J'ai suivi ton conseil Mr N.

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

Discussions similaires

  1. [Tableaux] Trier tableau multidimensionnel
    Par M@t2802 dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2007, 08h34
  2. [Tableaux] creation tableau multidimensionnel
    Par calitom dans le forum Langage
    Réponses: 4
    Dernier message: 23/11/2006, 15h31
  3. [Tableaux] Trier des données avec des tableaux
    Par yobogs dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2006, 13h39
  4. [Tableaux] Trier tableau deux dimensions
    Par dondano dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2006, 20h02
  5. Réponses: 6
    Dernier message: 17/02/2006, 15h07

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