如何对文件列表进行排序&目录所以目录在PHP中首先列出??? 我尝试natsort但它只按字母顺序排序。 我的消息来源:
$dirFiles = array();
$path = "./folder_path";
// opens images folder
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails" && $file != ".DS_Store") {
$isdir = $path . $file;
if(is_dir($isdir)){
$dirFiles[] = $file;
}
if(!is_dir($isdir)){
$dirFiles[] = $file;
}
}
}
closedir($handle);
}
natsort($dirFiles);
列出文件和目录
foreach($dirFiles as $file => $value)
{
$name = basename($value);
echo $name;
}
答案 0 :(得分:2)
你可以创建一个多维数组:
if(is_dir($isdir)){
$dirFiles['dir'][] = $file;
}
if(!is_dir($isdir)){
$dirFiles['file'][] = $file;
}
列出文件和目录:
ksort($dirFiles);
foreach($dirFiles as $files)
{
foreach($files as $file)
{
$name = basename($file);
echo $name;
}
}
答案 1 :(得分:0)
U可以使用带有默认回调的排序函数:
uasort($dirFiles, "folderFirstSort");
function folderFirstSort($a, $b){
if (is_dir($a) && !is_dir($b)){
//a is dir, should be "smaller"
return -1;
}else if (!is_dir($a) && is_dir($b)){
//b is dir, should be "smaller"
return 1;
}else{
//both are files OR folders, compare names
return strcmp($a,$b);
}
}
也许你需要交换-1
和1
的回报 - 我总是把它们混淆起来然后玩arround直到它与期望的结果相符:)