Php 避免在创建随机数时重复

Php 避免在创建随机数时重复,php,random,numbers,generator,Php,Random,Numbers,Generator,如果我想创建一些包含彼此不同的随机数的变量,现在我使用的方法是(在本例中,我使用PHP来设置示例): 所以,如果我想创建100个变量,所有变量都有不同的数字,出于显而易见的原因,我不想使用这种方法。有更好的选择吗?将它们放在一个数组中并搜索该数组。 $arr=array(); $arr[]=兰特(11000) 您可以从代码中循环使用任意数量的代码,我假设您需要1到1000之间的数字,并且不需要重复的数字。这里有一种方法可以避免每次循环遍历随机数,因为如果需要100个随机数,这会很耗时: $poo

如果我想创建一些包含彼此不同的随机数的变量,现在我使用的方法是(在本例中,我使用PHP来设置示例):


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

将它们放在一个数组中并搜索该数组。
$arr=array();
$arr[]=兰特(11000)


您可以从代码中循环使用任意数量的代码,我假设您需要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);
}
$pool=范围(11000);
$numbers=array();
对于($i=0;$i<5;$i++){
$random=rand(0,计数($pool)-1);
$numbers[$i]=$pool[$random];
$pool[$random]=数组_pop($pool);
}
只需将
5
更改为您需要的或使用变量即可


如果您有一个数字池要从中提取,这就可以工作,这就是为什么我们弹出最后一个元素,并替换已提取的数字以避免重复。我们每次都必须对池中的元素进行计数,因为它在每次迭代中收缩一个元素。如果您的池不是本机数组,您可能会保存初始值并根据
$i
将其递减,这样您就不会浪费时间计数,只需进行基本数学运算。

这将在给定范围内提供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);
$randoms=array();
而(计数($randoms)<5)
$randoms[rand(11000)]=1;
$randoms=数组_键($randoms);

你知道关于数组的知识吗?也许这就是我问复制的原因?我被困在“搜索”部分。
$randoms = array();
while(count($randoms) < 5)
    $randoms[rand(1, 1000)] = 1;
$randoms = array_keys($randoms);