2008-11-04 5 views
1

J'utilise le code ci-dessous pour afficher tous les fichiers d'un répertoire dans un menu déroulant. Est-ce que quelqu'un sait comment faire cela par ordre alphabétique? Je présume que cela a quelque chose à voir avec la fonction de tri, je n'arrive pas à comprendre comment!commander une liste de fichiers dans un dossier en utilisant php

<?php 
$dirname = "images/"; 
$images = scandir($dirname); 
$dh = opendir($dirname); 

while ($file = readdir($dh)) { 
if (substr($file, -4) == ".gif") { 
print "<option value='$file'>$file</option>\n"; } 
} 
closedir($dh); 
?> 

Répondre

6

Pourquoi vous lisez tous les noms de fichiers en utilisant scandir(), puis en boucle à travers eux la méthode readdir()? Vous pouvez simplement faire ceci:

<?php 

$dirname = "images/"; 
$images = scandir($dirname); 

// This is how you sort an array, see http://php.net/sort 
sort($images); 

// There's no need to use a directory handler, just loop through your $images array. 
foreach ($images as $file) { 
    if (substr($file, -4) == ".gif") { 
     print "<option value='$file'>$file</option>\n"; } 
    } 
} 

?> 

vous pouvez également utiliser natsort(), qui fonctionne de la même manière que sort() mais sortes dans « l'ordre naturel ». (Au lieu de trier comme 1,10,2,20 il triera comme 1,2,10,20.)

+0

Bonne réponse, merci –

3

scandir

array scandir (string $directory [, int $sorting_order [, resource $context ]]) 

Renvoie un tableau de fichiers et répertoires du répertoire. Paramètres

répertoire Le répertoire qui sera numérisé .

sortingorder Par défaut, l'ordre trié est alphabétique dans l'ordre croissant. Si l'option sorting_order est utilisée (définie sur 1), l'ordre de tri est dans l'ordre alphabétique décroissant.

1
$matches = glob("*.gif"); 
if (is_array ($matches)) { 
    sort($matches); 
    foreach ($matches as $filename) { 
     echo '<option value="'.$filename.'">.$filename . "</option>"; 
    } 
} 
0

Comme William Macdonald a souligné herescandir() sera en fait trier le tableau de retour en fonction de son paramètre $sorting_order (ou sa valeur par défaut: « Par défaut, l'ordre alphabétique est triée par ordre croissant. »). Le problème avec votre code est que vous générez le tableau de fichiers dans votre répertoire en utilisant $images = scandir($dirname); mais vous n'utilisez pas le tableau retourné dans votre code plus loin. Au lieu de cela vous itérer sur le contenu du répertoire en utilisant une autre méthode:

$dh = opendir($dirname); 
while ($file = readdir($dh)) { 
    if (substr($file, -4) == ".gif") { 
     print "<option value='$file'>$file</option>\n"; 
    } 
} 
closedir($dh); 

Ceci est la raison pour laquelle le résultat ne sont pas triées.

Questions connexes