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

PHP:特定范围内的多个唯一随机整数,php,random,unique,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)

我想创建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)    );


?>

试试下面的代码。
它将创建一个数组,其中包含8个介于0和99之间的随机值,同时检查这些值是否已被添加,以确保它们在整个数据库中是唯一的

$numbers = array();
while ( count($numbers) <= 8 ) {
    $x = mt_rand(0,99); 
    if ( !in_array($x,$numbers) ) {
        $numbers[] = $x;
    }
}
print_r($numbers);
$numbers=array();
而(计数($numbers)
$rnds=[];
做{
$newRnd=兰特(0,99);
$rnds[]=$newRnd;
}而(在数组中($newRnd,$rnds)&&count($rnds)<9);
印刷费($RND);

这是一个依赖于数组索引的优化版本。此解决方案的复杂性是线性的,而不是@AlexAndrei的答案中的n2。它依赖于使用数组索引来保证没有重复项,因此不需要在_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);
$random_number=[];
做{
$rand=rand(0,99);
$random_number[$rand]=$rand;
}而(计数($随机数)<9);
$random_numbers=array_values($random_numbers);//这将剥离键
打印(随机数字);

如果您使用的是
foreach
,您甚至可以放弃
array\u value
调用,这也会提高代码的速度,但是数组中的数字的形式是:
[a=>a,b=>b,…]
$range=range(0,99);shuffle($range);$rand\u ints=array\u slice($range,0,8)
还要注意,我的解决方案比每次生成一个数字时都在数组中检查
要快。如果有重复的,这只会执行另一次(do while)循环,而不是实际删除/覆盖它。用
5
存根
rand
,你会发现我是正确的。尽管你可以使用
mt_rand()
而不是
rand()
,这在理论上应该会加快平均生成过程,因为
mt_rand()
的熵更高。
$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);