1

次のディレクトリ構造を考慮してください。

- artists
  - Ben-Major
    - Album 1
      - Song-1.mp3
      - album-art.jpg
    - Album 2
      - Song-1.mp3
      - album-art.jpg

ご覧のとおり、Ben-Majorアーティストのディレクトリには 2 つのサブディレクトリ (Album 1Album 2) が含まれており、これらのサブディレクトリには MP3 ファイルと JPG ファイルが含まれています。MP3 ファイルの名前は関係ありませんが、JPG ファイルの名前は、表示されるサブディレクトリに関係なく、常に という名前になりalbum-art.jpgます。

album-art.jpg特定のアーティストに対して PHP で最も効率的な方法を使用して、ランダムなファイルを取得するにはどうすればよいですか?

問題は、特定の Artist ディレクトリalbum-art.jpgに、まったく呼び出されたファイルが含まれていない可能性があることです。私は最初に を使用することを考えreaddir()、次にサブディレクトリをループして を使用glob()してファイルを見つけました。ただし、複数のアルバムがある場合、これはほとんど非効率的だと思います (特定のアーティストが 10 枚以上のアルバムを持っている可能性があります)。

glob()再帰的に使用する方法はありますか?私が達成しようとしているものの疑似コードは次のとおりです。

function getRandomAlbumArt($artist)
{
    $matchedFiles = getFilesInSubDirs('album-art.jpg');
    // ^^ This would loop over the subdirectories in the most efficient manner, returning
    //    an array of all matched files, including their directory path.

    $index = rand(0, count($matchedFiles) - 1);
    return $matchedFiles[$index];
    // ^^ return 1 of the matches at random
}
4

2 に答える 2