如何列出使用PHP按字母顺序排序的目录中的所有文件?

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)

  • @David 你可以使用 `$files = glob("/your/path/*");` (3认同)
  • natsort() 的 +1 甚至可能需要考虑 natcasesort() (2认同)
  • @Pekka:刚刚验证了 `glob` 给出了 **sorted** 输出。+1 给你。 (2认同)

Vit*_*.us 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>
Run Code Online (Sandbox Code Playgroud)