1

点击刷新几次,有时我会看到“null”。

该脚本循环遍历一个文件夹以获取所有 mp3 文件并随机选择一个。我究竟做错了什么?谢谢

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

发生这种情况是因为数组索引从0to 开始length - 1,但您的脚本正在生成从0to的随机索引length。解决此问题的首选方法是使用array_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 回答