Php 如何按字母顺序对目录内容进行排序,子目录显示在普通文件之前?
我需要按字母升序对目录的内容进行排序。即使目录名按字母顺序出现在文件名之后,目录也必须出现在文件之前。与文件资源管理器一样,它们列出已排序的目录,然后列出已排序的文件 我正在使用以下代码,该代码按字母顺序为我提供了一个排序列表,但它不会首先推进目录:Php 如何按字母顺序对目录内容进行排序,子目录显示在普通文件之前?,php,sorting,readdir,Php,Sorting,Readdir,我需要按字母升序对目录的内容进行排序。即使目录名按字母顺序出现在文件名之后,目录也必须出现在文件之前。与文件资源管理器一样,它们列出已排序的目录,然后列出已排序的文件 我正在使用以下代码,该代码按字母顺序为我提供了一个排序列表,但它不会首先推进目录: if($handler = opendir($dir)) { while (($sub = readdir($handler)) !== FALSE) { // ... } closedir(
if($handler = opendir($dir))
{
while (($sub = readdir($handler)) !== FALSE)
{
// ...
}
closedir($handler);
}
像这样的东西应该有用
$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;
}
使用以下目录进行测试目录没有扩展名:
输出:
1
fooo
test
findp.php
simple_html_dom.php
test.txt
实现这一点的一种简单方法是使用[is_filepath,path]这样的对填充数组,排序此数组php将自动按第一个元素排序,然后按第二个元素排序,最后删除is_文件位: 酷,我不知道sort对非定标器数组值有效。
1
fooo
test
findp.php
simple_html_dom.php
test.txt
$path = 'somedir';
$dir = [];
// populate
foreach(glob("$path/*") as $f)
$dir []= [is_file($f), $f];
// sort
sort($dir);
// remove
$dir = array_map('end', $dir);
// PROFIT
print_r($dir);