PHP readdir()不按字母顺序返回文件

时间:2009-02-12 14:33:31

标签: php

我正在阅读一个带有一些图片的目录,使用一个非常简单的readdir()实现,如下所示:

if ($handle = opendir($path)) {
    while (false !== ($szFilename = readdir($handle))) {
    if ($szFilename[0] !== '.') {
        if (is_file($path.$szFilename)) {
                // do stuff
            }
        }
     }
 }

我遇到的问题是文件没有按字母顺序读取,因为readdir()的文档状态:

  

返回下一个文件的文件名   从目录。文件名是   按照他们的顺序返回   由文件系统存储。

另一个奇怪的事情是,在本地测试服务器上,相同的代码效果很好。在两种情况下,这都在使用LAMP堆栈的服务器上运行。

我知道我可以构建一个数组并对其进行排序,但我想知道我是否遗漏了我正在做的事情。

5 个答案:

答案 0 :(得分:29)

按字母顺序排列::我认为您误读了您引用的代码段...

  

从目录中返回下一个文件的文件名。文件名按文件系统存储的顺序返回。

'ls'以(通常)字母顺序显示文件的事实并不意味着它们是如何存储在文件系统上的。我担心PHP的行为就像规范一样。

如果必须按字母顺序排序,您可能需要考虑使用scandir作为您努力的基础。 :)

答案 1 :(得分:14)

您可以将所有文件名复制到数组中,然后使用

<?php
sort($filesArray);
?>

答案 2 :(得分:4)

我认为这里的文档很清楚。

  

将它们存储在文件系统中的顺序

与字母顺序

不同

答案 3 :(得分:1)

你误读了文档:

  

文件名按文件系统存储的顺序返回。

表示文件按创建顺序返回。

答案 4 :(得分:-2)

您可以使用一对:

按字母排序:

<?php
sort($handle);
?>

反向字母排序:

<?php
rsort($handle);
?>