[PHP] Trier par ordre alphabétique

Trier par ordre alphabétique [PHP] - PHP - Programmation

Marsh Posté le 01-07-2005 à 11:19:45    

salut !!
 
j'ai récupéré un petit script PHP sur le net pour me lister un répertoire qui contient environ 1300 fichiers, ça donne ça: http://flasheur.free.fr/warcraft3/maps (je l'ai un peu modifié visuellement)
 
l'embetant c'est qu'il affiche les fichiers dans le désordre :( et j'aimerais qu'il soit classé par ordre alphabétique, avant je savais le faire quand j'essaiyai le PHP mais je le faisait sur les base de données MySQL, là je sais pas le faire...  
 
 
y'a 2 fichiers dans le script: fonctions.php et index.php
je vous donne la partie qui liste les fichiers :jap:  

Code :
  1. // --------------------------------------- Affichage des fichiers ----------------------------------------- //
  2. $IndiceImage++;
  3. for($i=0;$i<$fileind;$i++)
  4. {
  5. $nomfic      = $filetab[$i]["nom"];
  6. $ext         = GetExtension($nomfic);
  7. $ext         = strtolower($ext);
  8. $icone       = GetIcone($ext);
  9. $IndiceImage = $i;
  10. $pair      = $i%2;
  11. ?>
  12. <TR>
  13.  <TD <? if ($pair==1) {echo "";?>BGCOLOR="#F2F4F7" bordercolor="#F2F4F7"<?} else {echo "";?>BGCOLOR="#EBEEF3" bordercolor="#EBEEF3"<?}?>width=35 ALIGN="center"><IMG SRC ="./images/<? echo $icone ?>"></TD>
  14.  <TD <? if ($pair==1) {echo "";?>BGCOLOR="#F2F4F7" bordercolor="#F2F4F7"<?} else {echo "";?>BGCOLOR="#EBEEF3" bordercolor="#EBEEF3"<?}?>ALIGN="left"  ><font face=" Verdana,Arial, Helvetica, sans-serif" size="1"><A HREF="<? echo $chemin."/".$nomfic; ?>"><? echo $nomfic ; ?></A></font></TD>
  15.  <TD <? if ($pair==1) {echo "";?>BGCOLOR="#F2F4F7" bordercolor="#F2F4F7"<?} else {echo "";?>BGCOLOR="#EBEEF3" bordercolor="#EBEEF3"<?}?>ALIGN="right"  ><font face=" Verdana,Arial, Helvetica, sans-serif" size="1"><? echo FormatTailleFichier(filesize($chemin."/".$nomfic)); ?></font></TD>
  16. </TR>
  17. <?
  18. }
  19. // ------ fin du tableau ---- //
  20. ?>


 
vous y comprenez quelquechose ou pas ? :D  
 
sinon si y'a une autre maniere de lister un dossier, en conservant ce coté esthétique qui permette un lien sur chaque fichier je suis preneur :jap:  
 
merci :hello:

Reply

Marsh Posté le 01-07-2005 à 11:19:45   

Reply

Marsh Posté le 01-07-2005 à 11:59:40    

Bah on pourrait avoir le code qui recupère la liste des fichiers .. ?

Reply

Marsh Posté le 01-07-2005 à 12:02:29    

Pas besoin.
Tu as visiblement un tableau de tableaux associatifs.
$filetab[$i]['nom'] contient le nom du fichier.
 
Utilise usort() sur $filetab, avec une fonction de comparaison qui compare le champ 'nom' de chacun des éléments de $filetab.
 
A moins de faire le boulot à ta place, je ne peux pas être plus précis ;)


Message édité par KrisCool le 01-07-2005 à 12:03:06

---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 01-07-2005 à 14:12:02    

merci je vais essayer, si vous voulez je vous uploade le code source :jap:

Reply

Marsh Posté le 01-07-2005 à 14:32:57    

heu en fait je comprends pas trop la fonction usort()
je doit comparer le nom avec quoi ?
 
voici le code source demandé par Gaspard77
 

Code :
  1. // ------------------------------- Récupération des fichiers et répertoires dans tableau-- //
  2. $handle  = @opendir($chemintotal);
  3. $file    = @readdir($handle);      // repertoire .
  4. $file    = @readdir($handle);      // repertoire ..
  5. $repind  = 0;
  6. $fileind = 0;
  7. while ($file = @readdir($handle))
  8. {
  9. if(is_dir("$chemintotal/$file" ))
  10. {
  11.  $reptab[$repind]["nom"]           = $file;
  12.  $reptab[$repind]["taille"]        = filesize("$chemintotal/$file" );
  13.  $repind++;
  14. }
  15. else
  16. {
  17.  $filetab[$fileind]["nom"]         = $file;
  18.  $filetab[$repind]["taille"]        = filesize("$chemintotal/$file" );
  19.  $fileind++;
  20. }
  21. }
  22. @closedir($handle);

Reply

Marsh Posté le 01-07-2005 à 14:46:42    

En gros, usort() va parcourir ton tableau en prenant les éléments deux par deux. Et pour chaque paire d'éléments, elle va appeler ta fonction de comparaison, en lui passant en paramètre les deux éléments de la paire.
 
Ta fonction de comparaison - appelons là comparer() - doit :
- prendre en paramètre deux arguments A et B
- si dans l'ordre dans lequel tu veux trier ton tableau A doit aller avant B : comparer($A, $B) doit renvoyer -1
- si dans l'ordre dans lequel tu veux trier ton tableau A doit aller après B : comparer($A, $B) doit renvoyer 1
- si les deux éléments sont de même ordre : comparer($A, $B) doit renvoyer 0
 
Dans ton cas, ta fonction comparer() s'écrit :
 

Code :
  1. function comparer($a, $b) {
  2.   if ($a['nom'] > $b['nom']) {
  3.     return 1;
  4.   } elseif ($a['nom'] < $b['nom']) {
  5.     return -1;
  6.   } else {
  7.     return 0;
  8. }


 
Il ne reste plus qu'à faire :

Code :
  1. usort($reptab, 'comparer');


 
Et le tour est joué ;)


---------------
Loose Change Lies | Bars | Last.fm
Reply

Marsh Posté le 01-07-2005 à 15:15:07    

yes merci c'est déja plus clair !!! [:xp1700]  
 
 
grand merci a toi, c'est vraiment génial de tomber sur des personnes qui explique comme ça :love:  
 
je vais essayer et je vous montre le résultat :jap:

Reply

Marsh Posté le 01-07-2005 à 18:36:19    

bon g testé ça marche pas :D  
 
comment on integre le usort($reptab, 'comparer'); dans le code ?
 
moi je l'ai mis juste avant l'affichage des noms des fichiers :o

Reply

Marsh Posté le 04-07-2005 à 00:37:45    

je pensais a un truc, ça doit bouffer des ressources ce script non ? si il doit comparer 1300 fichiers pour les trier... paske là ça  met quand meme bcp de temps a afficher la page :(  
 
http://flasheur.free.fr/warcraft3/

Reply

Sujets relatifs:

Leave a Replay

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