readdir () включает в себя пустую папку - PullRequest
1 голос
/ 11 сентября 2011

У меня есть эта часть скрипта, которая выводит папки в папку «альбомы» и упорядочивает их по алфавиту, но по какой-то причине она также включает пустую папку.

$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 ]

2 голосов
/ 11 сентября 2011

Проблема с этой строкой:

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

readdir возвращает false, если не осталось записей.Вот почему у вас есть дополнительный пункт в $items

РЕДАКТИРОВАТЬ

while($item = readdir($directory))
{
  $items[] = $item;
  sort($items);
}
1 голос
/ 11 сентября 2011

. - текущий каталог, а .. - родительский каталог.Это нормально, что readdir () возвращает их.

Кстати, вы можете упростить ваш код с помощью функции glob ():

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

glob("albums/*") вернет всезаписи в каталоге альбомов, отсортированные по алфавиту, без записей с точками и точками.

0 голосов
/ 11 сентября 2011
<?php
$files = array();

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

sort($files);

Вы можете изменить 'album/*' в соответствии с вашими потребностями (например, 'album/*.mp3').Обратите внимание, что этот метод не является рекурсивным, поэтому, если вам нужно обрабатывать подкаталоги в альбоме / каталоге, вам нужно изменить код, чтобы учесть это.

0 голосов
/ 11 сентября 2011

Попробуйте, так как в отсортированном порядке, просто array_shift () дважды сделает эту работу.Но лично я думаю, что это своего рода хакерство ...

...