我如何更改此功能,以便按顺序列出文件,因为它们是随机排序的。我已经更改了它,因此它排除了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;
}
答案 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