1

「albums」フォルダー内のフォルダーをエコーし​​てアルファベット順に並べるスクリプトのこの部分がありますが、何らかの理由で空のフォルダーも含まれています。

$directory = opendir("albums/");
$items = array();  
while($items[] = readdir($directory))
    sort($items);
closedir($directory);
foreach ($items as $item)
{  
    if(($item != ".") && ($item != "..")){  
        $files[] = $item;
    }
}

What should I do? I think the if(($item != ".") && ($item != "..")) is part of my problem but I can't figure how to handle it.

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()を2回実行するだけでこの作業が実行されます。でも個人的にはちょっとハッキングだと思います...

于 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')。このメソッドは再帰的ではないことに注意してください。したがって、album/ ディレクトリ内のサブディレクトリを処理する必要がある場合は、これを考慮してコードを変更する必要があります。

于 2011-09-11T14:29:41.317 に答える