PHP shuffle vs rand - 产生更好的随机性

时间:2012-12-31 18:27:34

标签: php

是否有人知道随机数生成的两个选择中哪一个会产生更好的随机性:

<?php
$array = array(1,2,3,4,5,6);

shuffle($array);
echo $array[0];

//// OR ////

echo rand(1,6);

?>

或者也许是我不知道的更好的选择?

2 个答案:

答案 0 :(得分:7)

两者都使用相同的PRNG,因此它们的随机性同样好/坏。显然,普通rand(1,6)更快,因为它只是数学而不是数学和数组的东西。除此之外,如果你想要一个数组中的随机元素,你可以使用array_rand()

PHP还有mersenne twistermt_rand())“更好”但不适合加密(可能与您的情况无关)。

如果您需要 true 随机性,您可以考虑从/dev/random进行阅读 - 但如果没有可用的随机性,该读取可能会阻止。您还可以使用硬件设备,根据某些物理效果为您提供更好的随机性。

答案 1 :(得分:1)

在大多数系统上,使用随机值为随机数生成器播种。在大多数应用程序中,使用当前时间的低阶部分(如秒和微秒)是一个非常好的策略。这是否适合您取决于应用程序。

在Linux系统上,程序还可以从/dev/random/dev/urandom读取几个字节来为随机数生成器播种。它是来自设备驱动程序和其他难以预测的现象的随机熵的集中。