Dav*_*d B 14 php sorting directory readdir opendir
我使用以下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 />");
}
}
?>
Run Code Online (Sandbox Code Playgroud)
问题是列表不是按字母顺序排序的(也许它按创建日期排序?我不确定).
如何确保按字母顺序排序?
cod*_*ict 35
该手册明确指出:
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");
}
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)