关于数组的mt_rand

时间:2016-01-23 19:03:04

标签: php random

我有一个代码从文件夹中选择一个随机网址:

<?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));

3 个答案:

答案 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个参数。