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

  1. #1
    Membre habitué
    [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
    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é
    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
    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é
    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
    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é
    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
    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.

###raw>template_hook.ano_emploi###