使用glob()
,我获得了目录中的文件和目录列表。
我想对此进行排序,因此我使用了natcasesort()
。然后我想先放置所有目录,所以我使用了usort()
。
$files = glob($directory.'/*');
natcasesort($files);
usort($files, function ($a, $b) {
return ((int) is_dir($b)) - ((int) is_dir($a));
});
var_dump($files);
第一种工作正常,但在第二次排序过程中,我失去了自然排序,似乎没有什么顺序。我有点希望如果一个sort函数返回0
,它会保留现有的顺序,但现在我不太确定。
我如何完成这样的任务,或者我是否需要手动使用两个foreach
语句来获取数组,一个用于目录,一个用于文件?
答案 0 :(得分:2)
您需要一步对整个数组进行排序:
$files = glob($directory.'/*');
usort($files, function ($a, $b) {
$aIsDir = is_dir($a);
$bIsDir = is_dir($b);
if ($aIsDir === $bIsDir)
return strnatcasecmp($a, $b); // both are dirs or files
elseif ($aIsDir && !$bIsDir)
return -1; // if $a is dir - it should be before $b
elseif (!$aIsDir && $bIsDir)
return 1; // $b is dir, should be before $a
});
var_dump($files);