[英]How to sort a list of files & directories so directories are listed first in PHP
如何对文件和目录列表进行排序,以便在 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;
}
您可以创建一个多维数组:
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;
}
}
你可以使用带有默认回调的排序函数:
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
的回报 - 我总是混淆它们并在周围播放直到它匹配所需的结果:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.