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] Tri et affichage des données d'un tableau contenu dans une session


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut [Tableaux] Tri et affichage des données d'un tableau contenu dans une session
    Bonjour

    Je voudrai un tri par ordre aphabétique d'une colonne d'un tableau multidimensionnel contenu dans une session.

    Le tableau contenu dans la session est scindé en 3 colonnes. numéro,nom,prénom

    Je voudrai faire une tri par ordre aplhabétique de la colonne 1 contenant les noms.

    J'ai fait ce code ce dessous

    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
     
    <?php
     
    function tri_al ($a,$b){
                  if(strlen($a[1])>strlen($b[1])){return -1;}
                  elseif($trlen($a[1])==$strlen($b[1])){return 0;}
                  else{return 1}
                                      }
    $tab=$_SESSION['a'];
    usort($tab,tri_al);
    $nbr=25;
    for($i=0;$i<=$nbr;$i++){
                    // ---> la je ne sais pas quoi mettre pour afficher les données triées
                           }
    ?>
    Merci d'avance

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Le tri que tu fais n'est pas un tri alphabétique, mais fonction de la taille du nom... Si tu vaux faire un tri alphabétique, tu peux utiliser array_multisort...

    Quel est ton problème pour afficher les données ? Un "echo $tab[$i][1];" affichera par exemple le nom de l'élément courant...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut re
    merci

    Je vais tester avec cette fonction.

    Mon problème était d'afficher les données triées. echo $tab[$i][1]; ne m'afficher pas les données triées mais les données tel qu'elles sont dans le tableau de la session.

    Je débute en tri de donnée et c'est chaud.

    Merci pour l'info

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par carmen256 Voir le message
    Mon problème était d'afficher les données triées. echo $tab[$i][1]; ne m'afficher pas les données triées mais les données tel qu'elles sont dans le tableau de la session.
    Non, ça t'affiche bien les données triées.

    La code suivant fonctionne (affiche aaaa puis aaa puis aa) :
    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
    function tri_al ($a,$b)
    {
        if(strlen($a[1])>strlen($b[1]))
        {
            return -1;
        }
        elseif(strlen($a[1])==strlen($b[1]))
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }
    $tab = array(array(1, 'aaa'), array(1, 'aaaa'), array(1, 'a'), array(1, 'aa'));
    usort($tab,'tri_al');
    $nbr=2;
    for($i=0;$i<=$nbr;$i++)
    {
        echo $tab[$i][1].'<br/>';
    }
    Mais je pense que ton problème viens plutôt de ta fonction de tri. Est-ce que tu veux trier par ordre alphabétique, on en fonction de la longueur de tes chaînes ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Voila j'ai fait des test de tri

    départ
    donnée dans le tableau contenu dans une session
    bs,bs,ib,bs,al,ni

    code de tri
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $tab=$_SESSION['a'];
    array_multisort($tab,SORT_ASC,SORT_STRING);
    $nbr=25;
    for($i=0;$i<=$nbr;$i++){
    echo "".$tab[$i][1].",".$tab[$i][2]."</br>";
                           }
    ?>
    Résultat
    bs,bs,al,bs,ib,ni

    que faut il faire pour afficher le trie alphabétique sans erreur comme.
    al,bs,bs,bs,ib,ni

    Comme mon but est de faire un trie alphabétique sur la colonne 1. J'ai fait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $tab=$_SESSION['a'];
    array_multisort($tab[1],SORT_ASC,SORT_STRING);
    $nbr=25;
    for($i=0;$i<=$nbr;$i++){
    echo "".$tab[$i][1].",".$tab[$i][2]."</br>";
                           }
    ?>
    Resultat
    bs,bs,ib,bs,al,ni -> bizarre identique au donnée départ.

    Que faire pour réaliser un tri alphabètique en fonction de la colonne 1 et pour afficher ca :
    al,bs,bs,bs,ib,ni

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Au temps pour moi, array_multisort ne fonctionnerait que si ton tableau se présentait sous la forme :
    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
    array(2) {
      [0]=>
      array(6) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(4)
        [4]=>
        int(5)
        [5]=>
        int(6)
      }
      [1]=>
      array(6) {
        [0]=>
        string(2) "bs"
        [1]=>
        string(2) "bs"
        [2]=>
        string(2) "ib"
        [3]=>
        string(2) "bs"
        [4]=>
        string(2) "al"
        [5]=>
        string(2) "ni"
      }
    }
    et pas s'il se présente sous la forme :
    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
    array(6) {
      [0]=>
      array(2) {
        [0]=>
        int(1)
        [1]=>
        string(2) "bs"
      }
      [1]=>
      array(2) {
        [0]=>
        int(2)
        [1]=>
        string(2) "bs"
      }
      [2]=>
      array(2) {
        [0]=>
        int(3)
        [1]=>
        string(2) "ib"
      }
      [3]=>
      array(2) {
        [0]=>
        int(4)
        [1]=>
        string(2) "bs"
      }
      [4]=>
      array(2) {
        [0]=>
        int(5)
        [1]=>
        string(2) "al"
      }
      [5]=>
      array(2) {
        [0]=>
        int(6)
        [1]=>
        string(2) "ni"
      }
    }
    Il faut donc bien que tu passes par usort et une fonction de rappel. Dans ce cas, la fonction de rappel doit être de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    function tri_al ($a,$b)
    {
        return strcmp($a[1],$b[1]);
    }
    $tab = array(array(1, 'bs'), array(2, 'bs'), array(3, 'ib'), array(4, 'bs'), array(5, 'al'), array(6, 'ni'));
    usort($tab,'tri_al');
    foreach($tab as $data)
    {
        echo $data[0].' : ';
        echo $data[1].'<br />';
    }

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php 
    $tab=$_SESSION['a'];
    $nbr=25;
     
    function tri_al ($a,$b){return strcmp($a[1],$b[1]);}
     
    usort($tab,'tri_al');
     
    for($i=0;$i<=$nbr;$i++){echo''.$tab[$i][1].'';}
    ?>
    c'est bon ca fonctionne je commence à comprendre, je vais faire des tas d'exemples pour bien maitriser le tri d'un tableau.

    si j'ai bien compris pour un tri entre 2 colonnes

    je dois faire ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php 
    $tab=$_SESSION['a'];
    $nbr=25;
     
    function tri_al ($a,$b,$c;$d){return strcmp($a[1],$b[1],$c[2],$d[2]);}
     
    usort($tab,'tri_al');
     
    for($i=0;$i<=$nbr;$i++){echo''.$tab[$i][1].','.$tab[$i][2].'';}
    ?>

  8. #8
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    non, la fonction de rappel utilisée par usort prend deux paramètres en entrée : deux éléments à comparer.

    Cette fonction doit renvoyer un nombre négatif quand le premier paramètre est inférieur au second, positif quand le premier paramètre est supérieur au second, et nul quand les deux paramètres sont de même niveau.

    Si j'utilise strcmp, c'est parce que c'est exactement ce que renvoie cette fonction pour des chaînes de caractères.

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

Discussions similaires

  1. Affichage des données d'un tableau de tableaux
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 13/07/2010, 10h59
  2. Réponses: 2
    Dernier message: 25/05/2009, 09h38
  3. Réponses: 1
    Dernier message: 28/03/2008, 21h37
  4. [Tableaux] Tri alphabétique sur des colonnes d'un tableau html
    Par arnaudperfect dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2007, 15h51
  5. Insérer des données d'un tableau php dans une table mysql
    Par tom43 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 02/08/2006, 09h38

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