hakimgomis | Bonjour, J'utilise la fonction USORT afin de trier des tableaux multi-dimension et je rencontre le problème suivant :
Lorsque mon élément de tableau contient une valeur numérique, le tri n'est pas correct. En revanche quand cet élément est alpha, pas de problème.
Voici l'exemple :
Code :
- function tri_array($a,$b) {
- //----------------------------------------
- // Fonction utilisée par usort pour les tris
- //----------------------------------------
- if ($a[4]==$b[4] ) return 0;
- return ($a[4]>$b[4] ) ? 1:-1;
- }
|
puis la fonction d'appel
Code :
- $ee=usort($tabl,tri_array); // tri de l'arborescence
|
Le tableau est constitué comme suit :
Code :
- array_push($tabl,array( $chn[1],
- $chn[0],
- $chn[2],
- str_pad(rtrim(ltrim($chn[4])),4,"0",STR_PAD_LEFT)."".str_pad(rtrim(ltrim($num+1)),4,"0",STR_PAD_LEFT),
- "",
- "" )); // nom, page, page mère, id, chaine, niveau
|
Dans ce cas le résultat est le suivant sur un écho de la zone triée :
Code :
- 0001000100010009006000440000000000000000
- 0001000100010009008000710020007300000000
- 0001000100010009008000750000000000000000
- 0001000100010009008000710000000000000000
- 0001000100010009008000710010007200000000
- 0001000100010009008001370000000000000000
- 0001000100010009008200760000000000000000
- .....
- 0001000100010009034000690000000000000000
- 0001000100010009050000800010008200000000
- 0001000100010009050000800000000000000000
- 0001000100010009050000800015008300000000
- 0001000100010009052000810025008500000000
- 0001000100010009052000810000000000000000
- 0001000100010009052000810020008400000000
- 0001000100020016000000000000000000000000
- 0001000100030022000000000000000000000000
|
En introduisant un caractère alpha dans la chaine Le tableau est crée comme suit :
Code :
- array_push($tabl,array( $chn[1],
- $chn[0],
- $chn[2],
- str_pad(rtrim(ltrim($chn[4])),4,"0",STR_PAD_LEFT)."X".str_pad(rtrim(ltrim($num+1)),3,"0",STR_PAD_LEFT),
- "",
- "" )); // nom, page, page mère, id, chaine, niveau
|
cela donne :
Code :
- 0001X0010001X0090060X0440000000000000000
- 0001X0010001X0090080X0710000000000000000
- 0001X0010001X0090080X0710010X07200000000
- 0001X0010001X0090080X0710020X07300000000
- 0001X0010001X0090080X0750000000000000000
- 0001X0010001X0090080X1370000000000000000
- 0001X0010001X0090082X0760000000000000000
- ....
- 0001X0010001X0090340X0690000000000000000
- 0001X0010001X0090500X0800000000000000000
- 0001X0010001X0090500X0800010X08200000000
- 0001X0010001X0090500X0800015X08300000000
- 0001X0010001X0090520X0810000000000000000
- 0001X0010001X0090520X0810020X08400000000
- 0001X0010001X0090520X0810025X08500000000
- 0001X0010002X016000000000000000000000000
- 0001X0010003X022000000000000000000000000
|
Si vous aviez une idée de la raison de ce tri erroné ? Merci |