2016-12-01 41 views
0

我的代碼,以便所有文件和文件夾:列表使用PHP

<?php 

$dirs = array_filter(glob('*'), 'is_dir'); 
$files = array_filter(glob('*'), 'is_file'); 
$all = $dirs + $files; 

foreach ($all as $value){ 
    echo '<li><a href="'.$value.'">'.$value.'</a></li>'; 
} 
?> 

這會將所有文件和文件夾,但按隨機順序:

Array 
(
    [2] => New folder 
    [6] => dir 
    [7] => dir1 
    [8] => dir2 
    [9] => dir3 
    [0] => A_test.txt 
    [1] => Index.php 
    [3] => app.exe 
    [4] => b_test 
    [5] => delete.php 
    [10] => hello.png 
    [11] => z_test.txt 
) 

sort()不起作用。我想按默認順序對它們進行排序。

+3

那麼,你想要做什麼「訂單」?你想排序嗎?如果是這樣,有許多排序的函數,如'sort()' –

+0

爲什麼你不能只用'$ all = glob('*');'或者我在這裏丟失了什麼? – cmorrissey

回答

0

就像Half Crazed所提到的那樣,在回顯文件之前,你只是錯過了sort()。

<?php 

$dirs = array_filter(glob('*'), 'is_dir'); 
$files = array_filter(glob('*'), 'is_file'); 
$all = $dirs + $files; 

sort($all); //sort them 

foreach ($all as $value){ 
    echo '<li><a href="'.$value.'">'.$value.'</a></li>'; 
} 

?> 
0

它們並不是真正的隨機順序。 glob的默認行爲是對它返回的名稱進行排序。如果您不需要希望他們排序,您實際上必須使用GLOB_NOSORT標誌來覆蓋此項。它們看起來是隨機的,因爲排序是區分大小寫的,並且大寫名稱出現在頂部。如果您想對它們進行大小寫不敏感的分類,請在兩個陣列上使用natcasesort,然後再合併它們。

$dirs = array_filter(glob('*'), 'is_dir'); 
natcasesort($dirs); 
$files = array_filter(glob('*'), 'is_file'); 
natcasesort($files); 
$all = $dirs + $files; 

foreach ($all as $value){ 
    echo '<li><a href="'.$value.'">'.$value.'</a></li>'; 
}