php目录按数字顺序列出文件

时间:2013-12-10 13:47:37

标签: php function

我如何更改此功能,以便按顺序列出文件,因为它们是随机排序的。我已经更改了它,因此它排除了Index.php文件。任何帮助将不胜感激。

function DirDisply() {
$TrackDir=opendir(".");

while ($file = readdir($TrackDir)) {
$info = pathinfo($file);
$file_name =  basename($file,'.'.$info['extension']);
if ($file == "." || $file == ".." || $file == "index.php"){ }
else {
print "<p><a class=btn href=$file target=content>Item Number $file_name</a></p>";

}
}
closedir($TrackDir);
return;
}

3 个答案:

答案 0 :(得分:1)

考虑使用glob()并按照您想要的方式对数组进行排序。

答案 1 :(得分:0)

如果你想继续使用readdir(),你必须在while循环中设置一个新数组,然后管理数组,以你想要的顺序排序它。

我个人会切换到scandir(),因为它内置了一个排序选项,并且已经按字母顺序按升序排序成一个数组(代码更少,更易于维护等):
http://www.php.net/manual/en/function.scandir.php

无论哪种方式,你都必须在阵列上使用foreach,因此scandir()是更好的方法,因为它也意味着没有while循环。

scandir()返回一个数组,可以(可以说)比使用readdir()循环遍历文件夹更容易管理,因为您可以一次检查最终结果。 IE检查数组是一个数组,有键,值,循环它,检查每个循环,等等。

然后,而不是像您现在拥有的while,只需使用scandir()foreach scandir()返回的数组。

请求示例(虽然它只是来自php.net,但它是一个很好的基本示例):

$dir    = 'yourdir';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);  //Reverse order

print_r($files1);
print_r($files2);

$files2中的1反转顺序。默认排序顺序为升序(0但不需要指定),1表示降序 当然,你使用你的代码循环数组($files1):
print "<p><a class=btn href=$file target=content>Item Number $file_name</a></p>";
你循环的数组的值将是你的文件名。

每当你使用一个函数时,你应该在php网上读取所有这些函数。如果你在php.net上查找原始函数readdir(),那么(几乎)总是链接到类似的函数,你会找到scandir();)

侧面注意:
也。你检查是否有什么东西,如果真的什么也不做,否则做点什么。对于这种情况,这不是正确的方法 如果它=某些东西,你应该做点什么,例如:

if ($file != "." || $file != ".." 
    || $file != "index.php")
  { 
    print "<p><a class=btn 
           href=$file target=content>Item Number $file_name</a></p>";
  }

你甚至可以让别人报告错误或“没有文件”或其他什么。

答案 2 :(得分:0)

如果您想要一些自然排序,可以将scandir和natsort结合起来。

    $images = array_diff(scandir($the_path), array('..', '.'));
    natsort($images);
    foreach ($images as $img) {
        // TODO
    }
来自php.net

natsort 自然排序:

  

此函数实现一种排序算法,以人类

的方式排序字母数字字符串

这是按字母顺序排列的,但它会处理类似文件名中的索引号:

file-2.jpg
file-1.jpg
file-10.jpg 

将被订购

file-1.jpg
file-2.jpg
file-10.jpg 
另一方面,scandir只会按字母顺序排序,如:

file-1.jpg
file-10.jpg
file-2.jpg