2014-05-18 126 views
0

使用​​3210,我獲得了目錄中的文件和目錄列表。按字母順序對字符串進行排序,但首先使用目錄

我想排序這個,所以我用natcasesort()。然後我想先放置所有目錄,所以我使用usort()

$files = glob($directory.'/*'); 
natcasesort($files); 
usort($files, function ($a, $b) { 
    return ((int) is_dir($b)) - ((int) is_dir($a)); 
}); 
var_dump($files); 

第一次排序工作得很好,但在第二個排序過程中,我失去了我的自然排序,並沒有出現有多少訂單。我有點希望如果排序函數返回0,它會保留現有的順序,但現在我不太確定。

我該如何完成這樣的任務,還是我需要手動使用兩個foreach語句,一個用於目錄,另一個用於文件?

回答

1

你需要在一個步驟進行排序整個數組:

$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); 
+0

它會一直,如果'漂亮的水珠()'有這個功能,內置 –

相關問題