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 sur 2 élements!


Sujet :

Langage PHP

  1. #1
    GYK
    GYK est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 406
    Points : 94
    Points
    94
    Par défaut [Tableaux] Trier un tableau sur 2 élements!
    Bonjour,
    J'ai un tableau de 4 éléments + la clé, et j'aimerais trier ce tableau sur 2 de ces élémnents.
    Comme je ne maitrise pas très bien, j'ai essayé avec deux fonctions et usort. La premiere sur un élément et la suivante sur le deuxieme et ca marche pas.
    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
     
    function triZ1($a, $b)
    {
    if ($a[Z1] == $b[Z1])
    return 0;
    if ($a[Z1] > $b[Z1])
    return 1;
    }
    usort ($table, triZ1);
     
    function triZ2($a, $b)
    {
    if ($a[Z2] == $b[Z2])
    return 0;
    if ($a[Z2] > $b[Z2])
    return 1;
    }
    usort ($table, triZ2);
    J'imagine qu'il y a beaucoup plus simple mais je ne trouve pas.
    Merci de m'aider

  2. #2
    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
    Bonjour

    Il faut éplucher les cas possibles et la priorité du tri, si tu veux trier sur les deux éléments ou séparément....
    Le plus simple serait que tu nous donnes la structure et un exemple de tableau trié (inutile d'avoir 2000 lignes )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Peut-être en utilisant la fonction array_multisort() ou une fonction d'un des commentaires :

    http://fr2.php.net/manual/fr/functio...sort.php#83117

  4. #4
    GYK
    GYK est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 406
    Points : 94
    Points
    94
    Par défaut
    Bonjour,
    Dans l'exemple joint, j'aimerais trier sur le code et ensuite la date
    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
      [6] => Array
            (
                [date] => 2008-12-04
                [cod] => 7
                [place] => 106947
                [rang] => 19779
            )
     
        [7] => Array
            (
                [date] => 2008-12-03
                [cod] => 7
                [place] => 121473
                [rang] => 19640
            )
     
        [8] => Array
            (
                [date] => 2008-12-03
                [cod] => 6
                [place] => 110518
                [rang] => 19807
            )
     
        [9] => Array
            (
                [date] => 2008-12-04
                [cod] => 6
                [place] => 122337
                [rang] => 19628
    J'ai pris le morceau de code qui prouve que cela ne marche pas
    Je voudrais avoir pour le code 7 le 2008-12-04 et ensuite le 2008-12-03
    On voit que le 6 est inversé!
    Pour ton lien Bisûnûrs je suis nul en anglais alors ......

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Le lien de Bisunurs est pourtant en bon français, j'ai adapté le code de la page de manuel

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?php
     
    $data = array (
        array (
            'date' => "2008-12-04",
            'cod' => 7,
            'place' => 106947,
            'rang' => 19779
        )
        ,
        array
            (
                'date' => "2008-12-03",
                'cod' => 7,
                'place' => 121473,
                'rang' => 19640
            )
        ,
        array
            (
                'date' => "2008-12-03",
                'cod' => 6,
                'place' => 110518,
                'rang' => 19807
            )
        ,
        array
            (
                'date' => "2008-12-04",
                'cod' => 6,
                'place' => 122337,
                'rang' => 19628
            )
        );
     
    print "<pre>";
     
    var_dump($data);
     
    // Obtient une liste de colonnes
    foreach ($data as $key => $row) {
        $code[$key]  = $row['cod'];
        $date[$key] = $row['date'];
    }
     
    array_multisort($code, SORT_ASC, $date, SORT_ASC, $data);
     
    print "<hr/>";
     
    var_dump($data);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    GYK
    GYK est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 406
    Points : 94
    Points
    94
    Par défaut
    Géniaaaal jml94.
    Ca marche.
    Bonne après-midi!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/11/2007, 10h27
  2. Réponses: 3
    Dernier message: 15/03/2007, 12h09
  3. [Tableaux] récupérer un tableau sur une autre page
    Par samsso2005 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2006, 22h58
  4. [Tableaux] Trier un tableau comme avec ORDER BY DESC
    Par Anduriel dans le forum Langage
    Réponses: 28
    Dernier message: 08/12/2005, 18h50
  5. Réponses: 3
    Dernier message: 26/09/2005, 22h24

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