Page 1 sur 1

ordre alphabetique en local mais pas en ligne

Posté : 23 mai 2006, 10:08
par sasg
bonjour,

avec ce script:
$rep = "./appart";
$dir = opendir($rep);

while ($dossier = readdir($dir))
 {
   if ($dossier !="." && $dossier != "..")
   {
     if(is_dir($rep."/".$dossier)) 
     {
      echo '<a href="par_page.php?dir='.$dossier.'&page=0">'.$dossier.'</a>';
  	  echo ' <br>';  
     }
   }
 }
closedir($dir);
mon menu en local est par ordre alphabetique mais pas en ligne chez free. :roll:

ca me pose pas vraiment de probleme que mon menu soit pas par ordre alphabetique mais j'aimerais savoir surtout pourquoi :?:
Car plus tard ca pourrait me poser des problemes pour d'autres scripts...

et comment dans ce cas-ci je pourrai resoudre ce problème :?:

Merci de toute l'aide que vous m'apporterez! :)

Posté : 23 mai 2006, 11:32
par jpaul
Je pense que la fonction readdir() liste le contenu du répertoire dans l'ordre de la création des éléments.

Pour les lister dans l'ordre alphabétque, tu peux les ranger dans un tableau et faire un tri (sort()) de ce tableau.

Posté : 23 mai 2006, 12:53
par sasg
merci mais ca changerai quoi dans mon code je n'arrive pas le faire :?

Posté : 23 mai 2006, 15:06
par jpaul
Bon alors j'essaye mais je n'ai pas le temps de tester :

Le script d'origine :
$rep = "./appart";
$dir = opendir($rep);

while ($dossier = readdir($dir))
{
   if ($dossier !="." && $dossier != "..")
   {
     if(is_dir($rep."/".$dossier))
     {
      echo '<a href="par_page.php?dir='.$dossier.'&page=0">'.$dossier.'</a>';
        echo ' <br>';  
     }
   }
}
closedir($dir);
// IL faut d'abord mettre le contenu du répertoire dans un tableau.
$rep = "./appart";
$dir = opendir($rep);

while ($dossier = readdir($dir))
{
$table_rep=$dossier;
}
closedir($dir);
//maintenant on trie le tableau $table_rep
sort($table_rep);
//ensuite on applique le reste du traitement
foreach($table_rep as $dossier) {
   if ($dossier !="." && $dossier != "..")
   {
     if(is_dir($rep."/".$dossier))
     {
      echo '<a href="par_page.php?dir='.$dossier.'&page=0">'.$dossier.'</a>';
        echo ' <br>';  
     }
   }
}
L'idée est là mais, sans tests, il y a peut être avec quelques erreurs aussi ;)

Posté : 23 mai 2006, 16:02
par sasg
j'ai 2 erreurs
Warning: sort() expects parameter 1 to be array, string given in F:\www\wamp\www\Nouveau dossier\list_dosssier_menu.php on line 14
toilette
Warning: Invalid argument supplied for foreach() in F:\www\wamp\www\Nouveau dossier\list_dosssier_menu.php on line 17
// IL faut d'abord mettre le contenu du répertoire dans un tableau.
$rep = "./appart";
$dir = opendir($rep);

while ($dossier = readdir($dir))
{
$table_rep=$dossier;
}
closedir($dir);
//maintenat on trie le tableau $table_rep
sort($table_rep);                                          //ligne 14
print ($table_rep);
//ensuite on applique le reste du traitement
foreach($table_rep as $dossier) {                          //ligne 17
   if ($dossier !="." && $dossier != "..")
   {
     if(is_dir($rep."/".$dossier))
     {
      echo '<a href="par_page.php?dir='.$dossier.'&page=0">'.$dossier.'</a>';
        echo ' <br>';  
     }
   }
}
pour creer un tableau c'st pas plutot un truc du genre
$table_rep=array ($dossier);
j'ai essaye comme ca mais ca fonctionne pas :(

Posté : 23 mai 2006, 16:33
par sasg
$rep = "./appart";

$dos = scandir($rep);

//maintenant on trie le tableau $table_rep
sort($dos);
print_r($dos);
//ensuite on applique le reste du traitement
foreach($dos as $dossier) {
   if ($dossier !="." && $dossier != "..")
   {
     if(is_dir($rep."/".$dossier))
     {
      echo '<a href="par_page.php?dir='.$dossier.'&page=0">'.$dossier.'</a>';
        echo ' <br>';  
     }
   }
}
ceci fonctionne en local mais pas en ligne car la fonction scandir est du php5 et que free ne l'est pas (PHP Version 4.4.3-dev)

Posté : 23 mai 2006, 16:58
par jpaul
Oups :oops: excuses, essayes :
$table_rep[]=$dossier;
Ca construit un tableau dynamiquement (affectation auto des indexes)...

Posté : 23 mai 2006, 17:47
par sasg
merci beaucoup jpaul de ton aide si precieuse :D

Posté : 18 nov. 2006, 00:12
par Marilyne
Et si je veux trier dans l'ordre décroissant comment fait on ? :oops:

Posté : 18 nov. 2006, 00:14
par Marilyne
et bien on utilise : arsort() :D

Posté : 04 mars 2007, 11:30
par Invité
comment fait on aussi pour trier par filemtime. Je suppose que la solution se trouve là :

while ($galerie = readdir($dir))
{
$table_rep[]=$dossier;
}

j'ai essayé plusieurs codes sans succès :cry: