在1到10之间生成7个唯一随机数的好方法。 我不能有任何重复。 我可以编写一大堆PHP来做这个(使用rand()并将使用过的数字推送到数组上)但是必须有一个快速的方法来完成它。
任何建议都会很棒。
答案 0 :(得分:10)
答案 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微秒