1

我有这部分脚本,它与“相册”文件夹中的文件夹相呼应,并按字母表排列它们,但由于某种原因,它还包括一个空文件夹。

$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

4 回答 4

2

问题在于这一行:

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

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

编辑

while($item = readdir($directory))
{
  $items[] = $item;
  sort($items);
}
于 2011-09-11T13:33:09.013 回答
1

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

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

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

glob("albums/*")将返回专辑目录中的所有条目,按字母顺序排序,并且没有点和点点条目。

于 2011-09-11T13:31:30.670 回答
0

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

于 2011-09-11T13:33:08.470 回答
0
<?php
$files = array();

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

sort($files);

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

于 2011-09-11T14:29:41.317 回答