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 un tableau associatif selon les clés


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut [Tableaux] trier un tableau associatif selon les clés
    Bonjour,

    Je ne maîtrise pas les fonctions de tri faisant appel à des fonctions.

    Mon problème, tout simple, est de trier un tableau associatif selon les clés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tab = array ('2007-03-30' => 1, 'D2007-04-06' => 2, 'V' => 2,  'Y2007-04-06' => 1');
    Pour faire simple, je veux que l'élément de clé 'V' apparaisse en tête du tableau.

    J'imagine que c'est la fonction uksort () qu'il faut utiliser.

    J'ai essayé quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function compare ($a, $b)
    {
    if ($a == 'V' && $b != 'V') return -1;
    elseif ($a != 'V' && $b == 'V') return 1;
    else return 0;
    }
     
    uksort ($tab, "compare");
    Ça ne marche pas du tout.

    Merci de votre aide.

  2. #2
    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
    heu... et le reste du tableau tu veux qu'il soit trié ?
    Si c'est non, alors il suffit de faire un truc dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $tab = array ('2007-03-30' => 1, 'D2007-04-06' => 2, 'V' => 2,  'Y2007-04-06' => '1');
    $v = array('V' => $tab['V']);
    unset($tab['V']);
    $tab = array_merge($v, $tab);
    ?>

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Bonjour Mr N.

    Merci de ta réponse, c'est astucieux.

    Cependant, j'aimerais aussi trier le reste du tableau, et finir par comprendre uksort ()

    La règle de tri est la suivante :
    1) 'V'
    2) 'D2007-04-06'
    Une date précédée de la lettre 'D'
    3) 'Y2007-04-06'
    Une date précédée de la lettre 'Y'
    4) 2004-03-30
    Une date

    J'ai juste besoin de comprendre comment construire la fonction liée à uksort ()

    Merci d'avance.

  4. #4
    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
    Ok, dans ce cas là il faut en effet utiliser uksort :
    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
    <?php
    $tab = array ('2007-03-30' => 1, 'D2007-04-06' => 2, 'V' => 2,  'Y2007-04-06' => '1');
    function compare($a, $b) {
       //V is always first
       if ($a == 'V' || $b == 'V') {
          if ($a == 'V') {
             return -1;
          } else {
             return 1;
         }
       } else {
         return strnatcasecmp($a, $b);
       }
    }
    uksort($tab, 'compare');
    var_dump($tab);
    ?>

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    MERCI beaucoup,

    J'installe ça en début d'après-midi,
    et je coche "Résolu" ensuite.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 676
    Points : 131
    Points
    131
    Par défaut
    Re-bonjour Mr N.,

    J'ai installé ton code, c'est nickel !!!

    Merci encore

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

Discussions similaires

  1. [MySQL] Trier un tableau associatif selon une colonne
    Par okoweb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/10/2011, 19h33
  2. [Tableaux] Trier un tableau en gardant les associations
    Par benja507 dans le forum Langage
    Réponses: 5
    Dernier message: 22/10/2008, 11h42
  3. Réponses: 2
    Dernier message: 20/09/2008, 11h16
  4. [Tableaux] Trier un tableau associatif
    Par nass007 dans le forum Langage
    Réponses: 12
    Dernier message: 30/07/2008, 17h43
  5. [Tableaux] trier un tableau associatif
    Par cijez dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 16h07

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