我已经研究了很多这个问题,但还没有找到合适的解决方案。
我所拥有的是使用专辑封面的一些图像,当您点击它们时,我想要从专辑中随机播放一首歌。专辑是01-05,他们的封面图片都在其中。点击后,他们会调用song = "<?php echo (random_song("album_number")); ?>";
,然后将其嵌入ID为#player
的div中。
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,并使用相同的系统选择随机歌曲。
感谢您的回答!
答案 0 :(得分:0)
你只是要求PHP选择一次随机值。您正在使用的其他语言是什么,JavaScript?如果是这样,请将随机歌曲选择器移动到JavaScript。
PHP在服务器上运行。 JavaScript在浏览器中运行。一旦服务器返回HTML页面,PHP就完成了,不会再运行。
答案 1 :(得分:0)
解决方案1 =服务器端
我假设点击相册会发送一个新页面的新查询,该新页面包含您点击的相册中的随机歌曲。我也假设你有一个树形结构,如:
Albums/
01/
Track01.mp3
Track02.mp3
Track03.mp3
...
02/
03/
...
我会在相册中加入相册号码并将其传递给$ dir。然后只是glob那个目录。一旦我有一个文件名数组,我使用array_rand拉出一个随机文件名。
<?php
function random_song($dir) {
$root = "Albums/"
if(is_dir($root.$dir)){
$songs = glob($root.$dir.'/*.mp3');
return $root.$dir.array_rand($songs);
}
//Error
}
?>
解决方案2 - 客户端
如果每次单击专辑图像时页面都没有重新加载,我会在专辑图像div中包含一个带有display:none;
的ul,并且在每个li中都有每首歌曲的路径。然后当点击专辑div时,我会使用JQuery选择一个随机子li(example here)并读取li的内容并将该字符串传递给播放器。