我正在使用以下PHP代码列出当前目录下的所有文件和文件夹:
<?php
$dirname = ".";
$dir = opendir($dirname);
while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
echo("<a href='$file'>$file</a> <br />");
}
}
?>
问题是列表没有按字母顺序排序(也许按创建日期排序?我不确定)。
如何确保按字母顺序排序?
答案 0 :(得分:35)
manual明确表示:
<强> READDIR 强>
从目录返回下一个文件的文件名。文件名以文件系统 存储的 顺序返回。
您可以做的是将文件存储在一个数组中,对其进行排序,然后将其打印为:
$files = array();
$dir = opendir('.'); // open the cwd..also do an err check.
while(false != ($file = readdir($dir))) {
if(($file != ".") and ($file != "..") and ($file != "index.php")) {
$files[] = $file; // put in array.
}
}
natsort($files); // sort.
// print.
foreach($files as $file) {
echo("<a href='$file'>$file</a> <br />\n");
}
答案 1 :(得分:6)
<?php
function getFiles(){
$files=array();
if($dir=opendir('.')){
while($file=readdir($dir)){
if($file!='.' && $file!='..' && $file!=basename(__FILE__)){
$files[]=$file;
}
}
closedir($dir);
}
natsort($files); //sort
return $files;
}
?>
<html>
<head>
</head>
<body>
<h1> List of files </h1>
<ul class="dir">
<? foreach(getFiles() as $file)
echo "<li name='$file'><a href='$file'>$file</a></li>";
?>
</ul>
</body>
</html>
答案 2 :(得分:2)
您可以将所有目录名称放在数组中,如:
$array[] = $file;
之后,您可以使用以下命令对数组进行排序:
sort($array);
然后打印包含该内容的链接。
我希望这有帮助。
答案 3 :(得分:2)
<?php
$dirname = ".";
$dir = opendir($dirname);
while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
$list[] = $file;
}
}
sort($list);
foreach($list as $item) {
echo("<a href='$item'>$item</a> <br />");
}
?>
答案 4 :(得分:1)
答案 5 :(得分:1)
我建议远离旧的opendir()/ readdir()。使用glob()或者如果你在目录中遇到很多文件,那么使用DirectoryIterator类:
http://www.php.net/manual/en/class.directoryiterator.php http://www.php.net/manual/en/function.glob.php
此致
答案 6 :(得分:0)