1

更新を数回押すと、「null」になることがあります。

このスクリプトは、フォルダーをループしてすべての mp3 ファイルを取得し、ランダムに 1 つを選択します。私は何を間違っていますか?ありがとう

if ($handle = opendir('../../hope/upload/php/files/')) {

    while (false !== ($entry = readdir($handle))) {

        $entry = trim($entry);
        if(preg_match('/.mp3/', $entry))
        {
        $mp3[] =  "$entry";
        }
    }


    closedir($handle);
    $count = count($mp3);

$rand = rand(0,$count -1); /// FIXED BY adding a -1 after count**
$mp3 = $mp3[$rand];

if($mp3)
     {
     echo "http://MyWebsite.com/hope/upload/php/files/$mp3";
     }
else
     {
    echo "null";
     }
}
4

2 に答える 2

2

これは、配列インデックスが から0に移動するために発生していますが、スクリプトは からにlength - 1ランダム インデックスを生成しています。これを修正するための推奨される方法は、次を使用することです。0lengtharray_rand()

$rand = array_rand($mp3);
$mp3 = $mp3[$rand];
于 2011-12-26T22:57:24.180 に答える
1

ランダムな範囲がなくなり (最大整数は の結果でcount()あり、配列のカウントは序数 0 ベースの配列の最大インデックスよりも 1 つ大きいことに注意してください)、コードが冗長に見えます。

試す...

$mp3s = glob('../../hope/upload/php/files/*.mp3');

$key = array_rand($mp3s);

$randomMp3 = $mp3s[$key];
于 2011-12-26T22:58:20.480 に答える