readdir()包含一个空文件夹


readdir() includes an empty folder

我有这部分脚本,它会回声"相册"文件夹中的文件夹,并按字母表排列,但出于某种原因,它还包括一个空文件夹。

$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 != ".."))是我问题的一部分,但我不知道如何处理它。

问题出在这行:

while($items[] = readdir($directory))

如果没有留下任何条目,则readdir返回false。这就是为什么你在$items 中有一个额外的项目

编辑

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

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

顺便说一句,你可以通过使用glob((函数来简化你的代码:

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

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

试试这个,因为它是按排序的,只需array_shift((两次就可以完成这项工作。但就我个人而言,我认为这是一种黑客行为。。。

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

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