请考虑以下目录结构:
- artists
- Ben-Major
- Album 1
- Song-1.mp3
- album-art.jpg
- Album 2
- Song-1.mp3
- album-art.jpg
如您所见,Ben-Major
艺术家的目录包含两个子目录(Album 1
和Album 2
),这两个子目录又包含一个MP3文件和一个JPG文件。 MP3文件的名称无关紧要,但JPG文件的名称,无论其出现的子目录如何,都将始终命名为album-art.jpg
。
如何使用PHP中针对给定艺术家的最有效方法提取随机album-art.jpg
文件?
问题是某些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
}
答案 0 :(得分:3)
使用glob()
时,可以将通配符放在目录中:
$matchedFiles = glob("artists/$artist/*/album-art.jpg");
答案 1 :(得分:0)
如果大多数相册都包含album-art.jpg
,并且您已有所有相册的路径。您可以随机播放相册,首先弹出,检查文件是否由file_exists或类似文件album-art.jpg
。如果不是,则弹出相册数组中的下一个元素...
这应该更有效,因为如果文件存在,你可能只在少数checkinig中匹配。
虽然巴马尔方法更为直接。