readdir()包含一个空文件夹

时间:2011-09-11 13:29:47

标签: php arrays sorting gallery opendir

我有这部分脚本回显“albums”文件夹中的文件夹,并按字母排列,但由于某种原因,它还包含一个空文件夹。

$directory = opendir("albums/");
$items = array();  
while($items[] = readdir($directory))
    sort($items);
closedir($directory);
foreach ($items as $item)
{  
    if(($item != ".") && ($item != "..")){  
        $files[] = $item;
    }
}

我该怎么办?我认为if(($item != ".") && ($item != ".."))是我问题的一部分,但我无法弄清楚如何处理它。

4 个答案:

答案 0 :(得分:2)

问题在于这一行:

while($items[] = readdir($directory))
如果没有条目,

readdir会返回false。这就是$items

中有额外项目的原因

修改

while($item = readdir($directory))
{
  $items[] = $item;
  sort($items);
}

答案 1 :(得分:1)

.是当前目录,..是父目录。 readdir()返回这些是正常的。

顺便说一句,您可以使用glob()函数简化代码:

$files = glob("albums/*");
// that's all

glob("albums/*")将返回相册目录中的所有条目,按字母顺序排序,不包含dot和dotdot条目。

答案 2 :(得分:0)

尝试这个,因为它按排序顺序,只需array_shift()两次就可以完成这项工作。但我个人认为这是一种有点黑客攻击......

答案 3 :(得分:0)

<?php
$files = array();

foreach (glob('album/*') as $file) {
    if (!is_dir($file)) {
        $files[] = basename($file);
    }
}

sort($files);

您可以修改'album/*'以满足您的需求(例如'album/*.mp3')。请注意,此方法不是递归的,因此如果您需要处理相册/目录中的子目录,则需要修改代码以解决此问题。