Как я могу перечислить все файлы в каталоге, отсортированном в алфавитном порядке с помощью PHP?
Я использую следующий код PHP для перечисления всех файлов и папок в текущем каталоге:
<?php
$dirname = ".";
$dir = opendir($dirname);
while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
echo("<a href='$file'>$file</a> <br />");
}
}
?>
Проблема в том, что список не упорядочен по алфавиту (возможно, он отсортирован по дате создания? Я не уверен).
Как я могу убедиться, что он отсортирован по алфавиту?
7 ответов:
Руководство ясно говорит, что:
Readdir
Возвращает имя файла следующего файла из каталога. Имена файлов возвращаются в поле порядок, в котором они хранятся в файловой системе.То, что вы можете сделать, это сохранить файлы в массиве, отсортировать его, а затем распечатать его содержимое как:
$files = array(); $dir = opendir('.'); // open the cwd..also do an err check. while(false != ($file = readdir($dir))) { if(($file != ".") and ($file != "..") and ($file != "index.php")) { $files[] = $file; // put in array. } } natsort($files); // sort. // print. foreach($files as $file) { echo("<a href='$file'>$file</a> <br />\n"); }
<?php function getFiles(){ $files=array(); if($dir=opendir('.')){ while($file=readdir($dir)){ if($file!='.' && $file!='..' && $file!=basename(__FILE__)){ $files[]=$file; } } closedir($dir); } natsort($files); //sort return $files; } ?> <html> <head> </head> <body> <h1> List of files </h1> <ul class="dir"> <? foreach(getFiles() as $file) echo "<li name='$file'><a href='$file'>$file</a></li>"; ?> </ul> </body> </html>
Вы можете поместить все имена каталогов в массив, например:
$array[] = $file;После этого вы можете отсортировать массив с помощью:
sort($array);И затем распечатайте ссылки с этим контентом.
Я надеюсь на эту помощь.
<?php $dirname = "."; $dir = opendir($dirname); while(false != ($file = readdir($dir))) { if(($file != ".") and ($file != "..") and ($file != "index.php")) { $list[] = $file; } } sort($list); foreach($list as $item) { echo("<a href='$item'>$item</a> <br />"); } ?>
Я бы рекомендовал отойти от старого opendir()/readdir(). Либо используйте glob (), либо, если вы столкнулись с большим количеством файлов в каталоге, используйте класс DirectoryIterator(es):
Http://www.php.net/manual/en/class.directoryiterator.php http://www.php.net/manual/en/function.glob.php
С уважением
Вы можете использовать этот красивый скрипт:
Http://halgatewood.com/free-php-list-files-in-a-directory-script/
Comments