упорядочение списка файлов в папке с использованием 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); ?> 

Почему вы читаете все имена файлов с помощью scandir (), а затем перебираете их с помощью метода readdir ()? Вы могли бы просто сделать это:

 <?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"; } } } ?> 

Также вы можете использовать natsort () , который работает так же, как sort (), но сортируется в «естественном порядке». (Вместо сортировки как 1,10,2,20 он будет сортироваться как 1,2,10,20 .)

ScanDir

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

Возвращает массив файлов и каталогов из каталога. параметры

directory Каталог, который будет сканироваться.

sorting_order По умолчанию отсортированный порядок в алфавитном порядке в порядке возрастания. Если используется необязательный sorting_order (установлен в 1), порядок сортировки является алфавитным в порядке убывания.

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

Как указал Уильям Макдональд , scandir () фактически сортирует возвращаемый массив в соответствии со своим параметром $sorting_order (или по умолчанию: «По умолчанию отсортированный порядок в алфавитном порядке в порядке возрастания.»). Проблема с вашим кодом заключается в том, что вы создаете массив файлов в своем каталоге, используя $images = scandir($dirname); но вы не используете возвращаемый массив в своем коде дальше. Вместо этого вы перебираете содержимое каталога с помощью другого метода:

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

Вот почему ваш результат не отсортирован.