2016-12-01 67 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>'; 
}