是否有人知道随机数生成的两个选择中哪一个会产生更好的随机性:
<?php
$array = array(1,2,3,4,5,6);
shuffle($array);
echo $array[0];
//// OR ////
echo rand(1,6);
?>
或者也许是我不知道的更好的选择?
答案 0 :(得分:7)
两者都使用相同的PRNG,因此它们的随机性同样好/坏。显然,普通rand(1,6)
更快,因为它只是数学而不是数学和数组的东西。除此之外,如果你想要一个数组中的随机元素,你可以使用array_rand()
。
PHP还有mersenne twister(mt_rand()
)“更好”但不适合加密(可能与您的情况无关)。
如果您需要 true 随机性,您可以考虑从/dev/random
进行阅读 - 但如果没有可用的随机性,该读取可能会阻止。您还可以使用硬件设备,根据某些物理效果为您提供更好的随机性。
答案 1 :(得分:1)
在大多数系统上,使用随机值为随机数生成器播种。在大多数应用程序中,使用当前时间的低阶部分(如秒和微秒)是一个非常好的策略。这是否适合您取决于应用程序。
在Linux系统上,程序还可以从/dev/random
或/dev/urandom
读取几个字节来为随机数生成器播种。它是来自设备驱动程序和其他难以预测的现象的随机熵的集中。