2014-01-18 48 views
0

我有一個主目錄「圖像」和許多子目錄 - 裏面是文件(也在主文件夾中)。例如樹:文件列表包括子目錄和排序樹

+Images 
-first.jpg 
-second.jpg 
++FOLDER1 
--image1.jpg 
++FOLDER2 
--image2.jpg 

我發現了一個腳本有:

function ListFiles($dir) { 
    if($dh = opendir($dir)) { 
     $files = Array(); 
     $inner_files = Array(); 
     while($file = readdir($dh)) { 
      if($file != "." && $file != ".." && $file[0] != '.') { 
       if(is_dir($dir . "/" . $file)) { 
        $inner_files = ListFiles($dir . "/" . $file); 
        if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
       } else { 
        array_push($files, $dir . "/" . $file); 
       } 
      } 
     } 
     closedir($dh); 
     return $files; 
    } 
} 
$list = ListFiles('../upload/_thumbs/Images'); 
sort($list); 

foreach ($list as $key=>$file){ 
    echo '<option value="">'.$file.'</option>'; 
} 

這個腳本工作正常,但我可以把結果通過文件夾(第一主內容,然後休息)排序......我得到我的我選擇:

../upload/_thumbs/Images/first.jpg 
../upload/_thumbs/Images/FOLDER1/image1.jpg 
../upload/_thumbs/Images/FOLDER2/image2.jpg 
../upload/_thumbs/Images/second.jpg 

厚望:

../upload/_thumbs/Images/first.jpg 
../upload/_thumbs/Images/second.jpg 
../upload/_thumbs/Images/FOLDER1/image1.jpg 
../upload/_thumbs/Images/FOLDER2/image2.jpg 

如果你能幫助我,我會很高興!謝謝!

回答

1

發生這種情況是因爲您正在使用完整路徑進行排序。除了排序之外,我會使用類似於排序的uasort,除非您使用回調函數來定義哪個排在第一位。

或者,您可以通過將文件名添加到路徑並在插入時使用該鍵來獲得。換句話說:

array_push($files, $dir . "/" . $file); 

變爲:

$files[$file . $dir] = $dir . "/" . $file; 

,那麼你使用排序ksort

+0

一切都OK!謝謝!應該是: $ files [$ dir。 $ file] = $ dir。 「/」。 $文件; ksort將我的選擇從高到低排序 - 如何改變它?從低到高? –

2

那麼它可能有一些做的排序函數調用的地方在最後幾行

sort($list); 

它導致數組進行排序按字母順序排列。你可以試着放棄它,或者你可以嘗試使用natsort。

natsort($list); 
相關問題