ordre alphabetique en local mais pas en ligne

Eléphant du PHP | 108 Messages

23 mai 2006, 10:08

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! :)

Eléphant du PHP | 451 Messages

23 mai 2006, 11:32

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.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 108 Messages

23 mai 2006, 12:53

merci mais ca changerai quoi dans mon code je n'arrive pas le faire :?

Eléphant du PHP | 451 Messages

23 mai 2006, 15:06

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 ;)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 108 Messages

23 mai 2006, 16:02

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

Eléphant du PHP | 108 Messages

23 mai 2006, 16:33

$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)

Eléphant du PHP | 451 Messages

23 mai 2006, 16:58

Oups :oops: excuses, essayes :
$table_rep[]=$dossier;
Ca construit un tableau dynamiquement (affectation auto des indexes)...
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 108 Messages

23 mai 2006, 17:47

merci beaucoup jpaul de ton aide si precieuse :D

Marilyne
Invité n'ayant pas de compte PHPfrance

18 nov. 2006, 00:12

Et si je veux trier dans l'ordre décroissant comment fait on ? :oops:

Marilyne
Invité n'ayant pas de compte PHPfrance

18 nov. 2006, 00:14

et bien on utilise : arsort() :D

Invité
Invité n'ayant pas de compte PHPfrance

04 mars 2007, 11:30

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: