如何对文件列表进行排序&目录首先在PHP中列出目录

时间:2014-04-21 12:25:47

标签: php arrays sorting

如何对文件列表进行排序&目录所以目录在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;
}

2 个答案:

答案 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);
   }
}

也许你需要交换-11的回报 - 我总是把它们混淆起来然后玩arround直到它与期望的结果相符:)