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 de tableau


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Points : 66
    Points
    66
    Par défaut [Tableaux] Tri de tableau
    J'aimerais classer un tableau par ordre décroissant et récupérer les indices dans l'ordre de ce classement. C'est à dire dans mon exemple : $b= array(0,2,1,4,3)

    J'ai réalisé ceci mais sans succès.
    Y'a t'il une manière de copier le résultat du arsort() dans un nouveau tableau

    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
     
    	// classement du tableau par ordre décroissant d'utilisation
     
    	//print_r($total);
    	$size2=count($user);
    	unset($a);
    	unset($b);	
    	for($l=0;$l<$size2;$l++){
    	    $a[$l][]=$total[$l][0];
    	    $a[$l][]=$l;
    	}
    	echo "<pre>";
    	print_r($a);
    	arsort($a); 
    	print_r($a);// le arsort fonctione mais $a n'est pas modifié
    	$size2=count($user);
    	for($l=0;$l<$size2;$l++){
    	    $b[]=$a[$l][1];
    	}
    	print_r($b);
    Voici le tableau :
    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
     
    Array
    (
        [0] => Array
            (
                [0] => 256 // classement par rapport à ce champs
                [1] => 0    // indice
            )
     
        [1] => Array
            (
                [0] => 3 // classement par rapport à ce champs
                [1] => 1    // indice
            )
     
        [2] => Array
            (
                [0] => 6 // classement par rapport à ce champs
                [1] => 2    // indice
            )
     
        [3] => Array
            (
                [0] =>    // classement par rapport à ce champs
                [1] => 3    // indice
            )
     
        [4] => Array
            (
                [0] => 2  // classement par rapport à ce champs
                [1] => 4    // indice
            )
     
    )

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    J'avoue que j'ai du mal à comprendre le problème... Vous triez un tableau de tableau... avec quelle relation d'ordre ? Comment définissez vous qu'un tableau est plus petit qu'un autre ?

    J'aimerais classer un tableau par ordre décroissant et récupérer les indices dans l'ordre de ce classement.
    A cette question (en oubliant le reste du post avec lequel j'ai du mal à faire le lien) j'aurais répondu par un morceau simple de code :

    <?php

    $a
    = array(1 => 13, 2 => 7, 3 => 9, 4 => 5, 6 => 14);
    print_r(array_keys($a));
    arsort($a);
    print_r(array_keys($a));

    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com

    qui donne la sortie :

    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
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 6
    )
    Array
    (
        [0] => 6
        [1] => 1
        [2] => 3
        [3] => 2
        [4] => 4
    )

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Points : 66
    Points
    66
    Par défaut
    Je suis d'accord avec toi pour ceci :


    <?php

    $a
    = array(1 => 13, 2 => 7, 3 => 9, 4 => 5, 6 => 14);
    print_r(array_keys($a));
    arsort($a);
    print_r(array_keys($a));

    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com

    mais comment peux tu enregister le tableau avec le nouvel ordonnancement et non pas seulement l'afficher à l'écran ?

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Ca marcherait pas un truc comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $a = array(...
    $b = $a;
    asort($b);
    (c'est juste une idée hein pas sûr que la recopie du tableau se fasse vraiment)

  5. #5
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Salut,

    Dès que tu veux trier un tableau sur autre chose que sa clé utilise la fonction usort , ca évite les trucs un peu trop alambiqué

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Points : 66
    Points
    66
    Par défaut
    Merci pour votre aide !
    Je vais essayer de récapituler :

    J'ai le tableau suivant dans la variable $a :

    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
    Array
    (
        [0] => Array
            (
                [0] => 256 
                [1] => 0  
            )
    
        [1] => Array
            (
                [0] => 3 
                [1] => 1
            )
    
        [2] => Array
            (
                [0] => 6 
                [1] => 2   
            )
    
        [3] => Array
            (
                [0] =>   
                [1] => 3    
            )
    
        [4] => Array
            (
                [0] => 2  
                [1] => 4 
            )
    
    )
    Et j'aimerais avoir dans la variable $b, le tableau classé comme ceci :
    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
    (
        [0] => Array
            (
                [0] => 256 
                [1] => 0  
            )
        [1] => Array
            (
                [0] => 6 
                [1] => 2   
            )
    
        [2] => Array
            (
                [0] => 3 
                [1] => 1
            )
    
        [3] => Array
            (
                [0] => 2  
                [1] => 4 
            )
    
        [4] => Array
            (
                [0] =>   
                [1] => 3    
            )
    )
    Comment dois-je m'y prendre pour réussir cela ?
    Merci

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Points : 66
    Points
    66
    Par défaut
    Il suffisait de faire ceci :
    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
     
    $a[0][0]=256;
    $a[0][1]=0;
     
    $a[1][0]=3;
    $a[1][1]=1;
     
    $a[2][0]=6;
    $a[2][1]=2;
     
    $a[3][0]=0;
    $a[3][1]=3;
     
    $a[4][0]=2;
    $a[4][1]=4;
     
    arsort ($a);
    reset($a);
    $i=0;
    while (list($key, $val) = each($a )) {
      $tableau_trie[$i] = ($key);
      $i++;
    }
    print_r($tableau_trie);

  8. #8
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function compare($a, $b)
    {
       if ($a[0] == $b[0]) {
         return 0;
       }
       return ($a[0] > $b[0]) ? -1 : 1;
    }
    usort ($a, "compare");
    Marchait aussi et je trouves plus simple à écrire et à relire.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Soyons fous...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usort ($a, create_function('$a, $b', 'return $b[0] - $a[0];');

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

Discussions similaires

  1. [Tableaux] Tri de tableau
    Par WagaSeb dans le forum Langage
    Réponses: 16
    Dernier message: 24/05/2007, 12h41
  2. [Tableaux] Tri de tableau
    Par BenoitDenis dans le forum Langage
    Réponses: 34
    Dernier message: 14/04/2006, 10h37
  3. [Tableaux] Tri de tableau
    Par BenoitDenis dans le forum Langage
    Réponses: 16
    Dernier message: 27/02/2006, 15h32
  4. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  5. [Tableaux] tri de tableau
    Par rdams dans le forum Langage
    Réponses: 19
    Dernier message: 08/11/2005, 13h46

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