我想知道PHP Rand()函数是如何工作的?我的意思是;这个函数如何在没有任何规则或任何其他随机函数的情况下随机化数字?
例如,我有一个这样的数组:
$numbers = array(0,1,2,3,4,5,6,7,8,9);
那么如何在没有rand(),array_rand()等的情况下随机化这个数字。
基本问题是:
随机化功能如何运作?
答案 0 :(得分:3)
PHP rand()
与所有psuedo-random number generators一样,不会生成真正的随机数据,而是使用一些数学函数来创建看似随机的数据。
方法可能有所不同,但基本原则是:
我们将初始值作为种子',s
。 (这可能是当前时间,用户输入的"随机"值,甚至从某些entropy source收集的真实随机熵
我们接着s
并将一个函数f
应用于它,生成一个新值s'
(s-prime)(此函数通常是模函数或散列函数)
然后我们可以无限制地重复此过程,将s'
放入f
生成s''
等等。
来自f
的这一系列结果是我们的"随机"号。
但是,希望您意识到,f
保持不变,并且在给定相同输入的情况下始终会产生相同的输出。
因此,如果我们为其提供相同的起始种子s
,我们将始终获得s'
,s''
,s'''
...
这就是为什么我们称他们为" Psuedo"随机。如果你不知道起始种子并且没有长时间观察序列,那么它似乎是随机的。但是,如果我们知道使用的函数f
和起始种子s
,我们就可以预测rand()
将产生的每个值。