PHP唯一随机数

时间:2011-10-17 11:02:19

标签: php

在1到10之间生成7个唯一随机数的好方法。 我不能有任何重复。 我可以编写一大堆PHP来做这个(使用rand()并将使用过的数字推送到数组上)但是必须有一个快速的方法来完成它。

任何建议都会很棒。

7 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

简单的单行:

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

答案 3 :(得分:0)

查看comments in the php manual,有几个解决方案。

这个很容易:

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

答案 4 :(得分:0)

整数?好吧,如果你想要10分中的7分,那么你就更有效率了,不要想要10分中的3分。

随意使用任何其他响应,但不是创建7个数字从10开始消除3.这将使速度提高一倍以上。

答案 5 :(得分:0)

Sjoerd答案的实现:

$ar = range(1, 10);
shuffle($ar);
$ar = array_slice($ar, 0, 7);

答案 6 :(得分:0)

&#34; shuffle&#34;方法有一个主要的错误。当数字很大时,洗牌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微秒

相关问题