使用php命令文件夹中的文件列表

时间:2008-11-04 00:01:31

标签: php sorting

我正在使用下面的代码在下拉菜单中显示目录中的所有文件。有谁知道如何按字母顺序排列?我认为它与sort函数有关,我无法弄清楚如何!

<?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 个答案:

答案 0 :(得分:6)

为什么要使用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。)

答案 1 :(得分:3)

scandir

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

返回文件数组和   目录中的目录。   参数

     

目录将是的目录   扫描。

     

sorting_order   默认情况下,排序顺序按升序排列。如果   使用可选的sorting_order   (设置为1),然后排序顺序为   按字母顺序排列。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

正如William Macdonald所指出的,here 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);

这就是为什么你的结果没有排序。