упорядочение списка файлов в папке с использованием php - PullRequest
1 голос
/ 04 ноября 2008

Я использую приведенный ниже код для отображения всех файлов из каталога в выпадающем меню. Кто-нибудь знает, как сделать это по алфавиту? Я предполагаю, что это как-то связано с функцией сортировки, я просто не могу понять, как!

<?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);
?>

Ответы [ 4 ]

6 голосов
/ 04 ноября 2008

Почему вы читаете все имена файлов с помощью 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.)

3 голосов
/ 04 ноября 2008

ScanDir

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

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

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

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

1 голос
/ 04 ноября 2008
$matches = glob("*.gif");
if ( is_array ( $matches ) ) {
   sort($matches);
   foreach ( $matches as $filename) {
      echo '<option value="'.$filename.'">.$filename . "</option>";
   }
}
0 голосов
/ 04 ноября 2008

Как Уильям Макдональд указал здесь 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);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...