Я использую приведенный ниже код для отображения всех файлов из каталога в выпадающем меню. Кто-нибудь знает, как сделать это в алфавитном порядке? Я полагаю, что это имеет какое-то отношение к функции сортировки, я просто не могу понять, как это сделать!
<?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);
Вот почему ваш результат не отсортирован.