繁体   English   中英

如何对文件和目录列表进行排序,以便在 PHP 中首先列出目录

[英]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);
   }
}

也许你需要交换-11的回报 - 我总是混淆它们并在周围播放直到它匹配所需的结果:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM