我已经研究了很多这个问题,但还没有找到合适的解决方案。
我所拥有的是一些使用专辑封面的图像,当您单击它们时,我希望从专辑中随机抽取一首歌曲。专辑是01-05,封面图片在里面。单击时,他们调用song = "<?php echo (random_song("album_number")); ?>";
它,然后将其嵌入带有 id 的 div 中#player
。
PHP:
<?php
function random_song($dir) {
$files = array (
(array) glob('01/*.mp3'),
(array) glob('02/*.mp3'),
(array) glob('03/*.mp3'),
(array) glob('04/*.mp3'),
(array) glob('05/*.mp3')
);
$set = substr($dir,0,2) - 1;
shuffle($files[$set]);
$key = array_rand($files[$set]);
$file = $files[$set][$key];
return $file;
}
?>
到目前为止,我已经让它播放了一首歌曲;但是,它从不选择另一首歌曲。如果我点击一张专辑,它会选择一首歌;单击第二个,它将播放一首歌曲。单击第一个,它会播放同一首歌曲。
shuffle()
如您所见,我已尝试添加,但并没有什么不同。我还var_dump()
对每个部分进行了$files
检查以确保其glob()
正常工作;没有问题。
我被困住了。我需要做什么?
解决方案:
Fritz van Campen 所说的是正确的:php 只被调用一次。它被写入<script>
并在解析后立即调用,因此每张专辑只调用它最初编码的歌曲。正如他所建议的,我需要做的是将歌曲选择器移至 JavaScript。我的解决方案:
var songs = <?php echo json_encode($files); ?>;
...
var set = parseInt(dir.substr(0,2))-1;
var song = songs[set][Math.floor(Math.random() * songs[set].length)];
...它将由 php 创建的数组传输到 JavaScript,并使用相同的系统来选择一首随机歌曲。
谢谢你的回答!