[英]PHP array_rand always returning the same
我已經研究了很多這個問題,但是還沒有找到合適的解決方案。
我只有幾張使用專輯封面的圖像,當您單擊它們時,我希望從專輯中隨機提取一首歌曲。 專輯為01-05,封面圖像在其中。 單擊后,他們將song = "<?php echo (random_song("album_number")); ?>";
稱為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()
,但是並沒有改變。 我還對$files
每個部分都做了一個var_dump()
,以確保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,並使用相同的系統選擇隨機歌曲。
感謝您的回答!
您只要求PHP選擇和隨機值一次。 您正在使用的其他語言是JavaScript? 如果是這樣,請將隨機歌曲選擇器移至JavaScript。
PHP在服務器上運行。 JavaScript在瀏覽器中運行。 服務器返回HTML頁面后,PHP完成,將不再運行。
解決方案1 =服務器端
我假設單擊專輯會發送一個新查詢,詢問新頁面是否包含您單擊的專輯中的隨機歌曲。 我還假設您有一個像這樣的樹結構:
Albums/
01/
Track01.mp3
Track02.mp3
Track03.mp3
...
02/
03/
...
我希望鏈接包含專輯編號到專輯,然后將其傳遞給$ dir。 然后只是遍歷該目錄。 一旦有了文件名數組,就可以使用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-客戶端如果如果每次單擊相冊圖像時頁面都沒有重新加載,則我將在ulul相冊圖像div中包含ul,其display:none;
每個李中都有通往每一首歌的道路。 然后,當單擊專輯div時,我將使用JQuery選擇一個隨機的子li( 此處為示例 ),並讀取li的內容並將該字符串傳遞給播放器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.