我正在使用下面的代码在下拉菜单中显示目录中的所有文件。有谁知道如何按字母顺序排列?我认为它与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);
?>
答案 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)
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);
这就是为什么你的结果没有排序。