PHP唯一随机数


PHP Unique Random Numbers

生成1到10之间7个唯一随机数的好方法是什么?我不能有任何副本。我可以写一段PHP代码来做这件事(使用rand()并将使用过的数字压入数组),但必须有一个快速的方法来完成它。

  • 创建一个从1到10(范围)的数组。
  • 按随机顺序排列(shuffle)。
  • 从数组(array_slice)中选择7个项目

用十个元素(数字1到10)填充数组,对数组进行洗牌,并删除前三个(或最后三个)元素。

简单一行:

print_r(array_rand(array_fill(1, 10, true), 7));

查看php手册中的注释,有几种解决方案。

一个简单的例子是:

$min = 1;
$max = 10;
$total = 7;
$rand = array();
while (count($rand) < $total ) {
    $r = mt_rand($min,$max);
    if (!in_array($r,$rand)) $rand[] = $r;
}

整数?好吧,如果你想要7分,那么你更有效地不想要3分。

可以随意使用任何其他答案,但不是创建7个数字,而是以10开始并消除3。这将使速度提高一倍以上。

shuffle方法有一个MAJOR FALW。当数字很大时,洗牌30亿个索引将立即导致500个错误。这里有一个非常大的数字的最佳解决方案。

function getRandomNumbers($min, $max, $total) {
    $temp_arr = array();
    while(sizeof($temp_arr) < $total) $temp_arr[rand($min, $max)] = true;
    return $temp_arr;
}

假设我想从10亿到40亿中得到10个唯一的随机数。

$random_numbers = getRandomNumbers(1000000000,4000000000,10);

PS:执行时间:0.027微秒