Page 1 sur 1

[RESOLU] Tri tableau

Posté : 17 févr. 2012, 11:41
par Bisvan
Bonjour,

Je me heurte à un soucis sur le tri des tableaux.
J'ai un tableau qui récence l'ensemble des résultats d'un mois jour par jour.

Soit mon tableau : $TOTAL_JOUR[$i] où $i est un jour du mois.
Pour février 2012 par exemple ma variable ira de $TOTAL_JOUR[1] à $TOTAL_JOUR[29]

J'aimerai classer l'ensemble de ces résultats par ordre décroissant en ne gardant que les 3 premiers.

Ex pour février =
$TOTAL_JOUR[1]=0
$TOTAL_JOUR[2]=0
$TOTAL_JOUR[3]=0
$TOTAL_JOUR[4]=0
......
$TOTAL_JOUR[23]=10
$TOTAL_JOUR[24]=8
$TOTAL_JOUR[25]=20
$TOTAL_JOUR[26]=0
$TOTAL_JOUR[27]=0
$TOTAL_JOUR[28]=0
$TOTAL_JOUR[29]=0
On imagine que l'ensemble des jours de février donne un résultat = 0 sauf le 23,24 et 25 (pour tester)

J'aimerai pouvoir afficher dans l'ordre :
$TOTAL_JOUR[25]=20
$TOTAL_JOUR[23]=10
$TOTAL_JOUR[24]=8


Une idée pour m'aider ? j'ai regardé les sort(),asort(),usort(),... mais je trouve pas la solution...

Merci !!

Bisvan

Re: Tri tableau

Posté : 17 févr. 2012, 11:49
par Thibaud C
Hello
asort($tableau,SORT_NUMERIC);
Regarde bien souvent, on peut mettre plusieurs paramètres du genre :) !
Après il faut que tu trouves un moyen d'inverser tout ca ;) ( rsort de tête le fait tout seul )

Re: Tri tableau

Posté : 17 févr. 2012, 11:54
par Bisvan
Merci :)

J'ai réussi à trouver cette solution déjà en fait mais mon soucis c'est que l'on reste dans du croissant et non décroissant et que ça m'affiche tous les résultats :
Voici mon script :
asort($TOTAL_JOUR,SORT_NUMERIC);
	

foreach ($TOTAL_JOUR as $key => $value) {
    echo "$key: $value\n";
}
Et ça donne :
20: 0
16: 0
1: 0
23: 0
24: 0
28: 0
29: 0
27: 0
26: 0
25: 0
14: 0
15: 0
6: 0
7: 0
5: 0
4: 0
2: 0
3: 0
8: 0
9: 0
13: 0
11: 0
10: 0
12: 0
19: 7.23
18: 7.23
17: 25.51
Une idée pour ne garder que les 3 résultats les plus grands ?

Re: Tri tableau

Posté : 17 févr. 2012, 11:55
par Thibaud C
met rsort a la place de asort déja ;)

Re: Tri tableau

Posté : 17 févr. 2012, 11:58
par Bisvan
Oups j'ai déjà résolu une partie du problème, en fait il faut utiliser arsort pour du décroissant :
arsort($TOTAL_JOUR,SORT_NUMERIC);
       

foreach ($TOTAL_JOUR as $key => $value) {
    echo "$key: $value\n";
}
Et là j'ai cela maintenant :
    17: 25.51
    18: 7.23
    19: 7.23
    22: 0
    21: 0
    20: 0
    23: 0
    24: 0
    28: 0
    29: 0
    27: 0
    26: 0
    25: 0
    16: 0
    15: 0
    6: 0
    7: 0
    5: 0
    4: 0
    2: 0
    3: 0
    8: 0
    9: 0
    13: 0
    14: 0
    12: 0
    11: 0
    10: 0
    1: 0
Maintenant reste le problème de n'afficher que les 3 premiers résultats.... une idée ? :)

Re: Tri tableau

Posté : 17 févr. 2012, 12:02
par Bisvan
Bon ba j'ai trouvé aussi...comme quoi ça inspire de venir ici :) moi qui galère depuis 2h...

Voici le bon code :
arsort($TOTAL_JOUR,SORT_NUMERIC);
	

$i="0";
foreach ($TOTAL_JOUR as $key => $value) {
    echo "<li>$key: $value</li>";
	if (++$i == 3) break;

}
	
$i me permettant de contrôler le nombre de résultat que je souhaite...

merci pour votre aide ;)

Re: Tri tableau

Posté : 17 févr. 2012, 12:03
par Thibaud C
j'aurais bien vu un truc :
$i=0;
foreach($montableau as $key=>$value)
{
   if($i>2)
        unset($montableau[$key]);

  $i++;
}
je ne sais pas si une fonction existe pour faire ca :/

Re: [RESOLU] Tri tableau

Posté : 17 févr. 2012, 12:04
par Bisvan
ça rejoint plus ou moins la solution que j'ai trouvé ;) merci !