使用如 richard@zend.com 在这些用户注释顶部提到的 srand() 种子 “(double)microtime()*1000000”。
使用任何其他种子的最显著影响是,每次调用脚本时,您的随机数往往会遵循相同或非常相似的序列。
请注意以下脚本
<?php
srand($val);
echo rand(0, 20) . ", ";
echo rand(0, 20) . ", ";
echo rand(0, 20) . ", ";
echo rand(0, 20) . ", ";
echo rand(0, 20);
?>
如果使用常量播种生成器,例如数字 5($val = 5),则生成的序列始终相同,在本例中为 (0, 18, 7, 15, 17)(至少对我来说是这样,不同的处理器/处理器速度/操作系统/操作系统版本/PHP 版本/Web 服务器软件可能会生成不同的序列)。
如果使用 time() 播种生成器,则序列更随机,但非常接近的调用将具有相似的输出。
如上面的 richard@zend.com 所建议,最好的种子是 (double) microtime() * 1000000,因为它提供了最大的伪随机性。实际上,它足够随机以满足大多数用户。
在一个测试程序中,生成了 100000 个介于 1 和 20 之间的随机数,结果相当均衡,每个数字的平均结果为 5000,误差大约为 100。每次调用的偏差各不相同。