PHP:特定范围内的多个唯一随机整数

时间:2015-10-06 10:27:30

标签: php random unique

我想创建8个随机整数,这些整数是唯一的,范围在0到99之间。

是否有一个比我想象的更简洁的解决方案?

<?php


do {

  $rnd1 = rand(0,99);
  $rnd2 = rand(0,99);
  $rnd3 = rand(0,99);
  $rnd4 = rand(0,99);
  $rnd5 = rand(0,99);
  $rnd6 = rand(0,99);

} while (($rnd1 == $rnd2) || 
         ($rnd1 == $rnd3) || 
         ($rnd1 == $rnd4) || 
         ($rnd1 == $rnd5) || 
         ($rnd1 == $rnd6) || 
         ($rnd2 == $rnd3) || 
         ($rnd2 == $rnd4) || 
         ($rnd2 == $rnd5) || 
         ($rnd2 == $rnd6) || 
         ($rnd3 == $rnd4) || 
         ($rnd3 == $rnd5) || 
         ($rnd3 == $rnd6) || 
         ($rnd4 == $rnd5) || 
         ($rnd4 == $rnd6) || 
         ($rnd5 == $rnd6)    );


?>

3 个答案:

答案 0 :(得分:2)

请尝试以下代码 它将创建一个包含0到99之间的8个随机值的数组,同时检查它们是否已经添加,以确保它们是唯一的。

$numbers = array();
while ( count($numbers) <= 8 ) {
    $x = mt_rand(0,99); 
    if ( !in_array($x,$numbers) ) {
        $numbers[] = $x;
    }
}
print_r($numbers);

另请参阅这两个Q&amp; A关于使用mt_randrand的问题 Difference between mt_rand() and rand()
What's the disadvantage of mt_rand?

答案 1 :(得分:1)

这是一个依赖于数组索引的优化版本。这个解决方案的复杂性是线性的,而不是像@AlexAndrei的答案中的n 2 。它依赖于使用数组索引作为保证没有重复,因此不需要添加in_array的开销。

$random_numbers = [];

do {
  $rand = rand(0, 99);
  $random_numbers[$rand] = $rand;
} while( count($random_numbers) < 9 );

$random_numbers = array_values($random_numbers); // This strips the keys

print_r($random_numbers);

如果您使用foreach,您甚至可以放弃array_values调用,这也会提高代码的速度,但数组中的数字将采用以下格式:{{1} }

答案 2 :(得分:-1)

$rnds = [];

do {
  $newRnd = rand(0, 99);
  $rnds[] = $newRnd;
} while(in_array($newRnd, $rnds) && count($rnds) < 9);

print_r($rnds);