避免在创建随机数之间重复

时间:2014-06-01 15:00:57

标签: php random numbers generator

如果我想创建一些包含彼此不同的随机数的变量,那么现在这是我正在使用的方法(在这种情况下我使用PHP来设置示例):

while($rand1==$rand2 or $rand2==$rand3 or $rand3==$rand4 or $rand4==$rand5 or
rand1==$rand3 or $rand2==$rand4 or $rand3==$rand5 or $rand5==$rand4 or  
$rand1==$rand4 or $rand2==$rand5 or $rand4==$rand3 or $rand5==$rand3 or 
$rand1==$rand5 or $rand3==$rand2 or $rand4==$rand1 or $rand5==$rand2 or 
$rand2==$rand1 or $rand3==$rand1 or $rand4==$rand2 or $rand5==$rand1):

$rand1=rand(1,1000); 
$rand2=rand(1,1000); 
$rand3=rand(1,1000); 
$rand4=rand(1,1000); 
$rand5=rand(1,1000); 
endwhile; 

所以,如果我想创建100个具有不同数字的变量,我不想出于明显的原因使用这种方法。还有更好的选择吗?

3 个答案:

答案 0 :(得分:0)

将它们放入数组并搜索数组。 $arr = array(); $arr[] = rand(1,1000);

你可以随心所欲地循环播放

答案 1 :(得分:0)

从您的代码中我假设您需要1到1000之间的数字,并且您不需要重复。如果你需要100个随机数字,这里不是每次循环你的随机数字的方法:

$pool = range(1, 1000);
$numbers = array();
for ($i = 0; $i < 5; $i++) {
    $random = rand(0, count($pool) - 1);
    $numbers[$i] = $pool[$random];
    $pool[$random] = array_pop($pool);
}

只需将5更改为您需要的任何内容或使用变量。

如果您有一个要提取的数字池,这就行了,这就是为什么我们弹出最后一个元素并且我们替换已经提取的数字以避免重复。我们每次都要计算池中的元素,因为它在每次迭代时会缩小一个元素。如果您的池不是本机阵列,您可以保存初始值并根据$i递减它,这样您就不会浪费时间计算,而只是做基础数学。

答案 2 :(得分:0)

这为您提供了给定范围内的5个唯一的随机数:

$a = range(1, 1000);
shuffle($a);
$randoms = array_slice($a, 0, 5);

(我认为表现并不重要)。

以更有效的方式,

$randoms = array();
while(count($randoms) < 5)
    $randoms[rand(1, 1000)] = 1;
$randoms = array_keys($randoms);
相关问题