[PHP] Ranger un tableau dans l'ordre alphabétique

Ranger un tableau dans l'ordre alphabétique [PHP] - PHP - Programmation

Marsh Posté le 22-07-2003 à 16:04:44    

g trouvé la fonction sort qui le fait,  
alors g essayé ça :
 

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                    
  3. $tabResp=array();
  4. $tabResp=explode(",",$leresp);
  5.                    
  6. sort($tabResp);
  7. $x=0;
  8. while ( trim($tabResp[$x])!="" )
  9. {
  10.     echo $tabResp[$x]."<BR>";
  11.     $x++;
  12. }


 
mais ça ne fonctionne pas !
où kcéti ksa coince ?


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 22-07-2003 à 16:04:44   

Reply

Marsh Posté le 22-07-2003 à 16:10:15    

vire la condition de ton while et regarde ce qu'il y a dans la premiere case de ton tableau tu vas vite comprendre ...  ;)

Reply

Marsh Posté le 22-07-2003 à 16:11:59    

un élément est vide donc il ce retrouve en début du tableau une fois trié.
Quand on commence a l'indice 1 (pour sauter l'élément vide),on voit bien le tableau trié.
Les léléments commencant par un espace sont avant les autres. ;)

Reply

Marsh Posté le 22-07-2003 à 16:18:23    

c vrai,  [:spikler]  
 
au fait, vous connaissiez ça ?

Code :
  1. echo "<PRE>";
  2.                     print_r($tabResp);
  3.                     echo "</PRE>";


 
ça affiche tout le tableau d'un coup !
je viens de le trouver...  :D


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 22-07-2003 à 16:22:03    

donc voilà :
c plus long mais plus propre...
 

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                    
  3.                     $tabResp=explode(",",$leresp);
  4.                    
  5.                     if ($tabResp[0]=="" )
  6.                     {
  7.                         $x=1;
  8.                     }
  9.                     else
  10.                     {
  11.                         $x=0;
  12.                     }
  13.                     $x=1;
  14.                     while ( trim($tabResp[$x])!="" )
  15.                     {
  16.                         $tabResp[$x]=trim($tabResp[$x]);
  17.                         $x++;
  18.                     }
  19.                    
  20.                     sort($tabResp);
  21.                                        
  22.                     if ($tabResp[0]=="" )
  23.                     {
  24.                         $x=1;
  25.                     }
  26.                     else
  27.                     {
  28.                         $x=0;
  29.                     }
  30.                     $x=1;
  31.                     while ( trim($tabResp[$x])!="" )
  32.                     {
  33.                         echo $tabResp[$x]."<BR>";
  34.                         $x++;
  35.                     }


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 22-07-2003 à 16:44:04    

Perso j'ai plus tendance à faire des trucs comme ça:

Code :
  1. function monTri( $var)
  2.                      {
  3.                        return (trim($var)!="" );
  4.                      }
  5.                      $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  6.                      $tabResp=explode(",",$leresp);
  7.                      sort($tabResp);
  8.                      print_r(array_filter($tabResp, "monTri" ));


Comme ça tu peux vraiment faire ta fonction du tri exactement comme tu veux pour ton tableau.

Reply

Marsh Posté le 22-07-2003 à 17:02:12    

sire de botcor a écrit :

donc voilà :
c plus long mais plus propre...
 

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                    
  3.                     $tabResp=explode(",",$leresp);
  4.                    
  5.                     if ($tabResp[0]=="" )
  6.                     {
  7.                         $x=1;
  8.                     }
  9.                     else
  10.                     {
  11.                         $x=0;
  12.                     }
  13.                     $x=1;
  14.                     while ( trim($tabResp[$x])!="" )
  15.                     {
  16.                         $tabResp[$x]=trim($tabResp[$x]);
  17.                         $x++;
  18.                     }
  19.                    
  20.                     sort($tabResp);
  21.                                        
  22.                     if ($tabResp[0]=="" )
  23.                     {
  24.                         $x=1;
  25.                     }
  26.                     else
  27.                     {
  28.                         $x=0;
  29.                     }
  30.                     $x=1;
  31.                     while ( trim($tabResp[$x])!="" )
  32.                     {
  33.                         echo $tabResp[$x]."<BR>";
  34.                         $x++;
  35.                     }



Ou plus court :
 

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                      
  3.   $tabResp=array();
  4.   $tabResp=explode(",",$leresp);
  5.                      
  6.   sort($tabResp);
  7.   $x=0;
  8.   while ( isset($tabResp[$x]) )
  9.   {
  10.         echo $tabResp[$x]."<BR>";
  11.         $x++;
  12.   }

 
Voire carément  

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                      
  3.   $tabResp=array();
  4.   $tabResp=explode(",",$leresp);
  5.                      
  6.   sort($tabResp);
  7.   foreach($tabResp as $valeur)
  8.   {      echo $valeur."<BR>";
  9.   }


Message édité par omega2 le 22-07-2003 à 17:02:59
Reply

Marsh Posté le 22-07-2003 à 17:06:11    

omega2 a écrit :

Ou plus court :
 

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                      
  3.   $tabResp=array();
  4.   $tabResp=explode(",",$leresp);
  5.                      
  6.   sort($tabResp);
  7.   $x=0;
  8.   while ( isset($tabResp[$x]) )
  9.   {
  10.         echo $tabResp[$x]."<BR>";
  11.         $x++;
  12.   }

 
Voire carément  

Code :
  1. $leresp="agzrk, kuaezg,aieugfz , zeiuft ,zeiugt,fegef,";
  2.                      
  3.   $tabResp=array();
  4.   $tabResp=explode(",",$leresp);
  5.                      
  6.   sort($tabResp);
  7.   foreach($tabResp as $valeur)
  8.   {      echo $valeur."<BR>";
  9.   }




 
Clairement et nettement l'utilisation du foreach, comme ca pas besoin de se peter les burnes pour savoir l'indice de départ. Bravo, j'y avait pas pense  [:claque2000]


---------------
Linux registered user #352556
Reply

Marsh Posté le 22-07-2003 à 17:09:42    

:pfff: ouaaais mais ça résoud pas le probleme de sire de botcor puisque si il y a des elements vides dans le tableau avec votre méthode ils sortent quand même... Donc?

Reply

Marsh Posté le 22-07-2003 à 17:13:48    

Anapajari a écrit :

:pfff: ouaaais mais ça résoud pas le probleme de sire de botcor puisque si il y a des elements vides dans le tableau avec votre méthode ils sortent quand même... Donc?

Donc il suffit de rajouter un simple if dans la boucle. ;)

Reply

Marsh Posté le 22-07-2003 à 17:13:48   

Reply

Marsh Posté le 25-07-2003 à 14:43:26    

Pb supplémentaire :
lorsqu'il y a des 1ères lettres en majuscules dans la liste, elles sont automatiquement rangées avant les éléments en minuscule de la liste !!
 
comment peut-on éviter ça ?


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 25-07-2003 à 14:45:25    

je vais répondre tout de suite :
natcasesort() plutôt que sort()


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 25-07-2003 à 14:55:12    

rectification : natcasesort() range les éléments du tableau provisoirement !
 
les numéros de cases ne se rangent pas dans l'ordre...
genre :
[0] A
[1] c
[2] B
donnerait :
[0] A
[2] B
[1] c
à la place de :
[0] A
[1] B
[2] c
 
Comment contrer ça ??
 
 


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 25-07-2003 à 15:10:42    

il y a ça qui est presque parfait  
(presque parce que certains éléments ne sont pas à leur place):

Code :
  1. function cmp ($a, $b)
  2.                 {
  3.                     return strcasecmp($a["field_name"], $b["field_name"]);
  4.                 }
  5.                 usort($tabResp, "cmp" );


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Marsh Posté le 25-07-2003 à 15:33:22    

voilà, comme ça c parfait !
 

Code :
  1. function cmp ($a, $b) {
  2. $tmp[0]=strtoupper($a);
  3. $tmp[1]=strtoupper($b);
  4. sort($tmp);
  5. return (strcmp(strtoupper($tmp[1]) , strtoupper($b))) ? 1 : -1;
  6. }
  7. usort($tabResp, "cmp" );


---------------
«Ceux qui croient que les peuples suivront leurs intérêts et non leurs passions n’ont rien compris au XXe siècle.» © Raymond Aron
Reply

Sujets relatifs:

Leave a Replay

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