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 :

Trier un array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Par défaut Trier un array
    Bonjour

    Je souhaiterais trier un tableau (array qui associe une clé à une valeur) sur les valeurs, mais en gardant l'association. Un exemple valant mieux qu'un long discours :
    {1->3;2->1;3->2}
    doit devenir
    {2->1;3->2;1->3}.

    Ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach ($adherents as $cle => $val) {
    		echo 'cle : '.$cle.', val : '.$val.'<br>';
    }
    sort($adherents);
    foreach ($adherents as $cle => $val) {
    		echo 'cle : '.$cle.', val : '.$val.'<br>';
    }
    pour trier le tableau adherents (dans ce tableau, en clé un numéro d'adhérent, en valeur un montant).
    Ce que me renvoient les echos :
    cle : 1, val : 230
    cle : 2, val : 533
    cle : 3, val : 1176
    cle : 4, val : 33
    Pour le premier (ce qui est juste, bonnes clés bonnes valeurs)

    Pour le deuxième :
    cle : 0, val : 33
    cle : 1, val : 230
    cle : 2, val : 533
    cle : 3, val : 1176
    Ce qui est bien trié mais n'associe pas les bonnes clés aux valeurs.

    Comment faire ?
    Merci !

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Le parcours d'un array se fait via l'index, c'est la référence.
    Donc tu ne peux modifier l'ordre d'un array sans modifier ses clés !
    C'est comme si tu disais que tu voulais ordonner la vie selon les âges (âge = index) mais en mettant 20ans avant 19ans, de ce fait ton programme de vie serait assez bizarre puisque tu gagnerai 2 ans (18->20), puis tu en perdrai 1 (20->19) pour ensuite en regagner 2 (19->21)...

    {1->3;2->1;3->2}
    deviendra forcement :
    {0->1;1->2;2->3}
    (Et bien 0 et non 1, en informatique on ne laisse pas de la place n'importe où, les tableaux sont indexés à partir de 0. Même si PHP doit tout de même faire une réindexation derrière pour les tableaux faisant des sauts d'index, c'est plus propre !)

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    asort fait ce que tu cherches

    Citation Envoyé par transgohan Voir le message
    Le parcours d'un array se fait via l'index, c'est la référence.
    Donc tu ne peux modifier l'ordre d'un array sans modifier ses clés !
    C'est comme si tu disais que tu voulais ordonner la vie selon les âges (âge = index) mais en mettant 20ans avant 19ans, de ce fait ton programme de vie serait assez bizarre puisque tu gagnerai 2 ans (18->20), puis tu en perdrai 1 (20->19) pour ensuite en regagner 2 (19->21)...

    {1->3;2->1;3->2}
    deviendra forcement :
    {0->1;1->2;2->3}
    (Et bien 0 et non 1, en informatique on ne laisse pas de la place n'importe où, les tableaux sont indexés à partir de 0. Même si PHP doit tout de même faire une réindexation derrière pour les tableaux faisant des sauts d'index, c'est plus propre !)
    Tu fais bien ce que tu veux avec les tableaux. Clé textuel , numérique , avec ou sans trou ... C'est pour ça que le foreach existe
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Mouarf je viens encore d'apprendre un truc bien dégueulasse de PHP. :p

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Par défaut
    ça marche, merci beaucoup pour vos réponses !

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

Discussions similaires

  1. Trier un array multidimensionnel
    Par peofofo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/12/2010, 10h31
  2. Trier 2 array et/ou un listview
    Par Nosce dans le forum VB.NET
    Réponses: 4
    Dernier message: 21/12/2009, 17h16
  3. [Tableaux] trier plusieurs array
    Par djedje37et28 dans le forum Langage
    Réponses: 5
    Dernier message: 29/03/2007, 10h44
  4. [Tableaux] Comment trier un array multidimensionel ?
    Par kaptnkill dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2006, 09h31
  5. [Tableaux] Trier un array
    Par borgfabr dans le forum Langage
    Réponses: 11
    Dernier message: 23/04/2006, 15h13

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