我需要按升序(按字母顺序)对目录内容进行排序。即使目录的名称出现在文件名之后(按字母顺序排列),目录也必须出现在文件之前。与文件浏览器一样,它们列出已排序的目录,然后列出已排序的文件。
我正在使用下面的代码,它按字母顺序给出了一个排序列表,但它不会首先推进目录:
if($handler = opendir($dir))
{
while (($sub = readdir($handler)) !== FALSE)
{
// ...
}
closedir($handler);
}
答案 0 :(得分:3)
实现这一目标的直接方法是使用[is_file(path), path]
这样的对填充数组,对此数组进行排序(php将自动按第一个元素排序,然后按第二个元素排序)最后删除{{1} }位:
is_file
答案 1 :(得分:1)
这样的事情应该有效
$contents = array();
while (($sub = readdir($handler)) !== FALSE) {
if ($sub !== '.' && $sub !== '..') {
$contents[] = array('is_dir' => is_dir($sub), 'name' => $sub);
}
}
closedir($handler);
usort($contents, function($a, $b) {
if ($a['is_dir'] && !$b['is_dir']) {
return -1;
}
else if (!$a['is_dir'] && $b['is_dir']) {
return 1;
}
// they are either both files or both directories
else {
return strcmp($a['name'], $b['name']);
}
});
foreach ($contents as $c) {
echo $c['name'] . PHP_EOL;
}
使用以下目录进行测试(目录没有扩展名):
ls
1 findp.php fooo simple_html_dom.php test test.txt
输出:
1
fooo
test
findp.php
simple_html_dom.php
test.txt