我有这部分脚本回显“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 != ".."))
是我问题的一部分,但我无法弄清楚如何处理它。
答案 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'
)。请注意,此方法不是递归的,因此如果您需要处理相册/目录中的子目录,则需要修改代码以解决此问题。