2011-09-11 59 views
1

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

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

回答

1

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

BTW,你可以使用水珠()函数简化代码:

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

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

+0

它会按字母排列吗? – Elad

+0

是的,它会:-) – arnaud576875

+0

但我什么时候使用它 - <?php $ files = glob(“albums/*”); ($文件作为$文件) { echo $ file; \t} } ?>它返回相册/ aalbums/balbums/calbums/dalbums/e(有文件夹命名为a,b,c,d,e),我需要它只返回a/b/c/d/e .. – Elad

0

试试这个,因为它是按照排序顺序排列的,只是array_shift()会做两次这样的工作。但我个人认为这是一个有点黑客...

2

问题是这一行:

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

readdir回报false如果没有条目被保留。这就是为什么你在$items

编辑有一个额外的项目

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

那我该怎么办? – Elad

+0

我编辑了答案。 –

+0

仍然无法正常工作..文件夹名称是“a”,它给了我'a.php'和'albums/a.php','albums/a.php'不存在,我不需要它存在 – Elad

0
<?php 
$files = array(); 

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

sort($files); 

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

相关问题