Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2944 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°464906
sire de Bo​tcor
Armorican way of life
Posté le 22-07-2003 à 16:04:44  profilanswer
 

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
mood
Publicité
Posté le 22-07-2003 à 16:04:44  profilanswer
 

n°464922
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-07-2003 à 16:10:15  profilanswer
 

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

n°464926
omega2
Posté le 22-07-2003 à 16:11:59  profilanswer
 

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. ;)

n°464941
sire de Bo​tcor
Armorican way of life
Posté le 22-07-2003 à 16:18:23  profilanswer
 

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
n°464948
sire de Bo​tcor
Armorican way of life
Posté le 22-07-2003 à 16:22:03  profilanswer
 

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
n°465002
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-07-2003 à 16:44:04  profilanswer
 

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.

n°465042
omega2
Posté le 22-07-2003 à 17:02:12  profilanswer
 

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
n°465050
claque2000
GamerTag : claquos2000
Posté le 22-07-2003 à 17:06:11  profilanswer
 

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
n°465054
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-07-2003 à 17:09:42  profilanswer
 

: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?

n°465061
omega2
Posté le 22-07-2003 à 17:13:48  profilanswer
 

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. ;)

mood
Publicité
Posté le 22-07-2003 à 17:13:48  profilanswer
 

n°467732
sire de Bo​tcor
Armorican way of life
Posté le 25-07-2003 à 14:43:26  profilanswer
 

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
n°467738
sire de Bo​tcor
Armorican way of life
Posté le 25-07-2003 à 14:45:25  profilanswer
 

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
n°467747
sire de Bo​tcor
Armorican way of life
Posté le 25-07-2003 à 14:55:12  profilanswer
 

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
n°467755
sire de Bo​tcor
Armorican way of life
Posté le 25-07-2003 à 15:10:42  profilanswer
 

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
n°467788
sire de Bo​tcor
Armorican way of life
Posté le 25-07-2003 à 15:33:22  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
tableau extraction aleatoire d'une ligne[PHP] passer une fonction dans une action d'un form
PHP ET REDIRECTION (suite)Menu et news en XML pour un site en PHP
[PHP Débutant ] Fonction () {}[PHP] probleme de session_start() sous windows
[PHP]Utilisation de foreach?[PHP] Condition qui marche pas ( BOOL )
[PHP] Pear comme systeme d'authentification?Un forum PHP / MySQL
Plus de sujets relatifs à : [PHP] Ranger un tableau dans l'ordre alphabétique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR