我有一个代码从文件夹中选择一个随机网址:
<?php
$urls = glob("videos/*.php");
$random = mt_rand(0, count($urls) - 1);
header ("location: ".$urls[$random]);
exit;
?>
我对$ random函数有帮助,但没有得到解释。
代码完美无缺。但是我想知道它为什么会这样:
mt_rand(0, count($urls) - 1);
而不是:
mt_rand(count($urls));
答案 0 :(得分:0)
mt_rand可以使用无参数或两个参数调用,但不能使用一个。
如果使用两个参数调用,它将在这两个值之间生成一个整数,这两个边界值本身也是潜在的候选者:
<强>分钟强>
可选的最低值返回
的最大强>
要返回的可选最高值
没有参数,范围介于0和某些系统相关的高自然数之间:
如果在没有可选min的情况下调用,则max参数mt_rand()返回0到mt_getrandmax()之间的伪随机值。
这与其他一些编程语言不同,在没有参数的情况下,在0和(但不包括1)之间返回小数数字。
也许您正在考虑 java.util.Random.nextInt(),它接受一个参数,并且会像您预期的那样工作,除了它是Java,而不是PHP。
答案 1 :(得分:0)
首先阅读fine manual,然后提问。 :)
但正如你已经做过的那样,我会尝试解释。
mt_rand函数为您提供随机数。如果没有给出参数,它将从集[0,mt_getrandmax()]
返回随机数。你不需要这个。
如果你像这样执行它:mt_rand(count($urls))
,你会收到这样的错误:
警告:mt_rand()需要2个参数,1在
中给出
您需要的是范围[0,count($urls)-1]
中的值,这就是您的代码所做的。
如果你对count($ urls)-1部分感到惊讶,那么计数($ ulrs)会给你url的数量,所以如果你有五个,你会重新获得5.但是你需要随机url的索引,PHP中的索引从0开始,所以如果你有五个url,那么数组的最后一个索引将是4.
答案 2 :(得分:0)
否mt_rand(count($urls));
无效。
并且mt_rand(0, count($urls));
总是 不能按需运作。
说明:count($any_array)
将返回lastIndex + 1。例如
$a=array(10,20,30);
echo count($a); //3, but $a[3] is invalid
所以你有-1位。 并且mt_rand采用0或2个参数。