在php中使用opendir()按字母顺序sorting和显示目录列表

PHP的noob在这里 – 我拼凑在一起这个脚本来显示一个文件夹与opendir的图像列表,但我不能算出如何(或在哪里)按字母顺序排列数组

<?php // opens images folder if ($handle = opendir('Images')) { while (false !== ($file = readdir($handle))) { // strips files extensions $crap = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-"); $newstring = str_replace($crap, " ", $file ); //asort($file, SORT_NUMERIC); - doesnt work :( // hides folders, writes out ul of images and thumbnails from two folders if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") { echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\" </a></li>\n";} } closedir($handle); } ?> 

任何意见或指针将不胜感激!

您需要先将文件读入数组,然后才能对其进行sorting。 这个怎么样?

 <?php $dirFiles = array(); // opens images folder if ($handle = opendir('Images')) { while (false !== ($file = readdir($handle))) { // strips files extensions $crap = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-"); $newstring = str_replace($crap, " ", $file ); //asort($file, SORT_NUMERIC); - doesnt work :( // hides folders, writes out ul of images and thumbnails from two folders if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") { $dirFiles[] = $file; } } closedir($handle); } sort($dirFiles); foreach($dirFiles as $file) { echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\" </a></li>\n"; } ?> 

编辑:这与你所要求的没有关系,但你也可以用pathinfo()函数获得更通用的文件扩展名处理。 你不需要一个硬编码的扩展数组,那么你可以删除任何扩展名。

使用opendir()

opendir()不允许对列表进行sorting。 您必须手动执行sorting。 为此,首先将所有文件名添加到数组中,并使用sort()对它们进行sort()

 $path = "/path/to/file"; if ($handle = opendir($path)) { $files = array(); while ($files[] = readdir($dir)); sort($files); closedir($handle); } 

然后使用foreach列出它们:

 $blacklist = array('.','..','somedir','somefile.php'); foreach ($files as $file) { if (!in_array($file, $blacklist)) { echo "<li>$file</a>\n <ul class=\"sub\">"; } } 

使用scandir()

使用scandir()更容易一些。 它默认为您执行sorting。 以下代码可以实现相同的function:

 $path = "/path/to/file"; $blacklist = array('somedir','somefile.php'); // get everything except hidden files $files = preg_grep('/^([^.])/', scandir($path)); foreach ($files as $file) { if (!in_array($file, $blacklist)) { echo "<li>$file</a>\n <ul class=\"sub\">"; } } 

使用DirectoryIterator (首选)

 $path = "/path/to/file"; $blacklist = array('somedir','somefile.php'); foreach (new DirectoryIterator($path) as $fileInfo) { if($fileInfo->isDot()) continue; $file = $path.$fileInfo->getFilename(); echo "<li>$file</a>\n <ul class=\"sub\">"; } 

这是我会这样做的方式

 if(!($dp = opendir($def_dir))) die ("Cannot open Directory."); while($file = readdir($dp)) { if($file != '.') { $uts=filemtime($file).md5($file); $fole_array[$uts] .= $file; } } closedir($dp); krsort($fole_array); foreach ($fole_array as $key => $dir_name) { #echo "Key: $key; Value: $dir_name<br />\n"; } 

注意:把它移到foreach循环中,以便newstringvariables被正确地重命名。

 // strips files extensions $crap = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-"); $newstring = str_replace($crap, " ", $file ); 
 $directory = scandir('Images');