trier un tableau

trier un tableau - PHP - Programmation

Marsh Posté le 17-05-2006 à 09:52:47    

savez vous s'il existe une fonction (comme sort()) qui trie un tableau mais en fonction d'une colonne choisie ?
 
par exemple dans mon cas j'ai une colonne avec des noms de société et dans la deuxième un total. et j'aimerai classer en fonction du total.
 
merci d'avance

Reply

Marsh Posté le 17-05-2006 à 09:52:47   

Reply

Marsh Posté le 17-05-2006 à 10:05:22    

tu peux utiliser la fonction array_multisort()
voir ->http://www.manuelphp.com/php/function.array-multisort.php
 
ou alors tu crées un requete SQL pour trier ton TOTAL avec un ORDER BY il me semble mais j en suis pas sur voila :d

Reply

Marsh Posté le 17-05-2006 à 10:07:05    

[:rtfm]
array_multisort et l'exemple 3 est exactement ce que tu cherces à faire

Reply

Marsh Posté le 17-05-2006 à 11:39:12    

j'ai pas réussi a adapter le code a mon tableu car je ne l'ai pas défini de la meme façon. Et puis je ne cherche pas à le trier en fonction d'une dimension toute entière mais d'un critère.
 
Mon tableau a une surface de:  
$MTG[4000][12]
 
et j'aimerai le trier en fonction de:
$MTG[][1]

Reply

Marsh Posté le 17-05-2006 à 11:43:19    

donc t'as juste un tableau à 2 dimensions :??: avec asort() ça va aller tout seul


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 17-05-2006 à 11:48:28    

ouai mais dans ce cas il va trier en fonction de la premier colonne et je veux qu'il le fasse en fonction de la deuxième

Reply

Marsh Posté le 17-05-2006 à 11:52:56    

fait un print_r() d'une ligne stp


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 17-05-2006 à 12:08:32    

Sh@rdar a écrit :

fait un print_r() d'une ligne stp


 

Code :
  1. Array ( [0] => AIRBUS\\Bremen [1] => 26 [2] => 10 [3] => 10 [4] => [5] => 2 [6] => 4 [7] => [8] => [9] => [10] => [11] => [12] => )


 
26 = 10 + 10 + 2 + 4  :na:
 
la colonne [1] fait la somme des colonnes [2] à [12]


Message édité par specics le 17-05-2006 à 12:11:59
Reply

Marsh Posté le 17-05-2006 à 12:12:49    

ouhlà, de la chaine, des entiers :pet1cable: mais une seule dimension..
 
t'as fait un print_r() de $MTG ou du $MTG[4000] là ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 17-05-2006 à 13:53:08    

print_r($MTG[$i-1]) dans une boucle mais ca correspondait a un numéro de ligne

Reply

Marsh Posté le 17-05-2006 à 13:53:08   

Reply

Marsh Posté le 17-05-2006 à 13:57:11    

j'ai pas bien lu ta seconde réponse en fait..
 
ce que tu veux faire est impossible, la structure de ton tableau ne convient pas puisque tu essaye de trier sur un élément d'une ligne et pas une colonne, tu t'es mélangé les pinceaux entre les deux :)
 
il faudra sortir la clef que tu veux trier et utiliser array_multisort()
 

Message cité 1 fois
Message édité par Sh@rdar le 17-05-2006 à 13:58:48

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 17-05-2006 à 14:06:52    

fait un usort avec la fonction de comparaison qui va bien.
Un truc dans le genre:

Code :
  1. function cmp($a, $b){
  2.      if ($a[1] == $b[1]) {
  3.        return 0;
  4.    }
  5.    return ($a[1] < $b[1]) ? -1 : 1;
  6. }

Reply

Marsh Posté le 17-05-2006 à 14:08:22    

anapajari a écrit :

fait un usort avec la fonction de comparaison qui va bien.
Un truc dans le genre:

Code :
  1. function cmp($a, $b){
  2.      if ($a[1] == $b[1]) {
  3.        return 0;
  4.    }
  5.    return ($a[1] < $b[1]) ? -1 : 1;
  6. }



 
 
le fait qu'il y ait à la fois chaine et entiers va pas géner :??:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 17-05-2006 à 14:13:11    

y'a pas de chaine dans la case 1 :o

Reply

Marsh Posté le 17-05-2006 à 14:13:59    

Sh@rdar a écrit :

j'ai pas bien lu ta seconde réponse en fait..
 
ce que tu veux faire est impossible, la structure de ton tableau ne convient pas puisque tu essaye de trier sur un élément d'une ligne et pas une colonne, tu t'es mélangé les pinceaux entre les deux :)
 
il faudra sortir la clef que tu veux trier et utiliser array_multisort()


 
ben si c'est a partir d'une colonne que je cherche a trier  :hello:  
 
je veux trier toute les lignes a partir de la colonne [1]
 
c'est pas comptatible ?  :??:  

Reply

Marsh Posté le 17-05-2006 à 14:20:21    

anapajari a écrit :

fait un usort avec la fonction de comparaison qui va bien.
Un truc dans le genre:

Code :
  1. function cmp($a, $b){
  2.      if ($a[1] == $b[1]) {
  3.        return 0;
  4.    }
  5.    return ($a[1] < $b[1]) ? -1 : 1;
  6. }



 
il faut pas avoir 2 tableaux pour ça ?

Reply

Marsh Posté le 17-05-2006 à 14:25:59    

je suis pas bien en forme depuis ce matin mais le tableau il est comme ça non ?
 
MTG[i][0] = 'Airbus';
MTG[i][1] = 26;
..
MTG[i][12] = '';
MTG[i+1][0] = 'tagada';
MTG[i+1][1] = 42
...
 
et tu trie sur le total, le reste de ton tableau va être ordonné comment ??
 
MTG[i+1][1] = 42;
MTG[i][1] = 36;
 
en fait, plus je relis, plus j'ai l'impression de rien capter :??:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 17-05-2006 à 14:33:01    

moi de ce que j'ai compris il a un tableau à 2 dimensions:

Code :
  1. MTG[0][0] = 'A';
  2. MTG[0][1] = '44';
  3. MTG[1][0] = 'C';
  4. MTG[1][1] = '10';
  5. MTG[2][0] = 'Z';
  6. MTG[2][1] = '108';


Et il veut que son tableau se retrouve trié en fonction de [i][1] et donc comme ça

Code :
  1. MTG[0][0] = 'Z';
  2. MTG[2][1] = '108';
  3. MTG[1][0] = 'A';
  4. MTG[1][1] = '44';
  5. MTG[2][0] = 'C';
  6. MTG[2][1] = '10';


Le code que j'ai donné plus haut doit faire ça ( sauf que ça trie peut être en asc au lien d'en desc)...
 
Et non il ne faut pas avoir 2 tableaux pour faire ça.
La fonction de cmp prend 2 elements du tableau courant et les compare. Dans notre cas ces deux elements sont des tableaux, on précise donc [1] sur chacun d'eux pour qu'ils soient comparer en fonction de la valeur de cette "colonne".
 
edit: j'avais merdé l'ordre des résultats du tableau.
 
edit2: en fait tu dois quand même pouvoir le faire avec array_multisort


Message édité par anapajari le 17-05-2006 à 14:41:35
Reply

Marsh Posté le 17-05-2006 à 14:39:23    

ah oui j'avais pas pigé ça [:joce]


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed