Problème de tri avec usort

Problème de tri avec usort - PHP - Programmation

Marsh Posté le 20-02-2004 à 13:55:30    

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 :
  1. function tri_array($a,$b) {
  2. //----------------------------------------
  3. // Fonction utilisée par usort pour les tris
  4. //----------------------------------------
  5. if ($a[4]==$b[4] ) return 0;
  6. return ($a[4]>$b[4] ) ? 1:-1;
  7. }


 
puis la fonction d'appel

Code :
  1. $ee=usort($tabl,tri_array); // tri de l'arborescence


 
Le tableau est constitué comme suit :

Code :
  1. array_push($tabl,array( $chn[1],
  2.   $chn[0],
  3.   $chn[2],
  4.   str_pad(rtrim(ltrim($chn[4])),4,"0",STR_PAD_LEFT)."".str_pad(rtrim(ltrim($num+1)),4,"0",STR_PAD_LEFT),
  5.   "",
  6.   "" )); // 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 :
  1. 0001000100010009006000440000000000000000
  2. 0001000100010009008000710020007300000000
  3. 0001000100010009008000750000000000000000
  4. 0001000100010009008000710000000000000000
  5. 0001000100010009008000710010007200000000
  6. 0001000100010009008001370000000000000000
  7. 0001000100010009008200760000000000000000
  8. .....
  9. 0001000100010009034000690000000000000000
  10. 0001000100010009050000800010008200000000
  11. 0001000100010009050000800000000000000000
  12. 0001000100010009050000800015008300000000
  13. 0001000100010009052000810025008500000000
  14. 0001000100010009052000810000000000000000
  15. 0001000100010009052000810020008400000000
  16. 0001000100020016000000000000000000000000
  17. 0001000100030022000000000000000000000000


 
En introduisant un caractère alpha dans la chaine  
Le tableau est crée comme suit :

Code :
  1. array_push($tabl,array( $chn[1],
  2.   $chn[0],
  3.   $chn[2],
  4.   str_pad(rtrim(ltrim($chn[4])),4,"0",STR_PAD_LEFT)."X".str_pad(rtrim(ltrim($num+1)),3,"0",STR_PAD_LEFT),
  5.   "",
  6.   "" )); // nom, page, page mère, id, chaine, niveau


 
 
cela donne :

Code :
  1. 0001X0010001X0090060X0440000000000000000
  2. 0001X0010001X0090080X0710000000000000000
  3. 0001X0010001X0090080X0710010X07200000000
  4. 0001X0010001X0090080X0710020X07300000000
  5. 0001X0010001X0090080X0750000000000000000
  6. 0001X0010001X0090080X1370000000000000000
  7. 0001X0010001X0090082X0760000000000000000
  8. ....
  9. 0001X0010001X0090340X0690000000000000000
  10. 0001X0010001X0090500X0800000000000000000
  11. 0001X0010001X0090500X0800010X08200000000
  12. 0001X0010001X0090500X0800015X08300000000
  13. 0001X0010001X0090520X0810000000000000000
  14. 0001X0010001X0090520X0810020X08400000000
  15. 0001X0010001X0090520X0810025X08500000000
  16. 0001X0010002X016000000000000000000000000
  17. 0001X0010003X022000000000000000000000000


 
Si vous aviez une idée de la raison de ce tri erroné ?  
 
Merci

Reply

Marsh Posté le 20-02-2004 à 13:55:30   

Reply

Marsh Posté le 20-02-2004 à 14:47:06    

arrete moi si je me trompe mais tu fais ton tri sur le 5eme element de ton tableau. Or il est toujours égale à "" dans ton exemple!?
 
ps: à mon avis c'est quand même plus simple de faire trim($text) que ltrim(rtrim($text))


Message édité par anapajari le 20-02-2004 à 14:47:19
Reply

Marsh Posté le 20-02-2004 à 14:54:47    

Oui ok il y a plus de code et c'est bien le 5eme élément mais il contient les éléments concaténés des 4ème.  
En fait, je traite une arborescence et je stocke dans la 5eme zone l'identifiant de la page mère.
 
Pour le trim, ok, c'est une vieille habitude !

Reply

Sujets relatifs:

Leave a Replay

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