如何在php中生成多个随机数而不使用相同的随机数
我的问题可能很容易回答。但我想不出来如何在php中生成多个随机数而不使用相同的随机数,php,Php,我的问题可能很容易回答。但我想不出来 <?php $id1 = rand(1,4); $id2 = rand(1,4); $id3 = rand(1,4); $id4 = rand(1,4); ?> 我有这个。但这有时会产生多个3等。但在我的项目中,这是不可能发生的事情。最后,范围将在1到100之间。但这只是为了测试它是如何工作的。有人能帮我吗?这是为了什么 但是,也许你可以这么做: $ids = range(1, 10); shuffle
<?php
$id1 = rand(1,4);
$id2 = rand(1,4);
$id3 = rand(1,4);
$id4 = rand(1,4);
?>
我有这个。但这有时会产生多个3等。但在我的项目中,这是不可能发生的事情。最后,范围将在1到100之间。但这只是为了测试它是如何工作的。有人能帮我吗?这是为了什么 但是,也许你可以这么做:
$ids = range(1, 10);
shuffle($ids);
var_dump($ids);
/*
* 1st Result:
*
* array (size=10)
* 0 => int 10
* 1 => int 2
* 2 => int 5
* 3 => int 7
* 4 => int 9
* 5 => int 1
* 6 => int 3
* 7 => int 6
* 8 => int 4
* 9 => int 8
*/
shuffle($ids);
var_dump($ids);
/*
* 2nd Result:
*
* array (size=10)
* 0 => int 5
* 1 => int 9
* 2 => int 6
* 3 => int 4
* 4 => int 2
* 5 => int 10
* 6 => int 3
* 7 => int 7
* 8 => int 8
* 9 => int 1
*
*/
检查此代码:
$values=array(); #preparint storage for numbers
$found=0; #number of found numbers
while($found!=4): #script is looking for 4 numbers
$v=rand(1,4); #range of numbers (1-4)
if(!in_array($v,$values)): #if found number isn't in array
$values[]=$v; #add it
$found++; #and increment counter
endif;
endwhile;
foreach($values as $value):
echo '<p>'.$value.'</p>'; #echo found numbers
endforeach;
$values=array()#数字预存
$found=0#找到的号码数
而($found!=4):#脚本正在查找4个数字
$v=兰特(1,4)#数字范围(1-4)
如果(!in_数组($v,$values)):#如果找到的数字不在数组中
$values[]=$v#加上
$found++#和增量计数器
endif;
结束时;
foreach($value为$value):
回显“”.$value.“”#回声找到了号码
endforeach;
脚本准备查找1-4范围内的4个随机唯一数字。创建一个可从中选择的值范围。
$temp = array() // global
$id1 = is_num_exists(rand(1,4));
$id2 = is_num_exists(rand(1,4));
$id3 = is_num_exists(rand(1,4));
$id4 = is_num_exists(rand(1,4));
function is_num_exists($id){
while(in_array($id,$temp)){
$id = rand(1,4);
}
$temp[] = $id;
return $id
}
将其洗牌并获取前N个结果
$range = range(0, 100);
shuffle($range);
$n = 10;
$result = array_slice($range, 0 , $n);
有几种方法可以实现这一点:
- 创建给定范围的数组(使用
函数)并将其洗牌。要检索值,可以遍历它。如果您的范围不太大,这将非常有用。这似乎是你的情况range()
$range = range(1, 10); shuffle($range);
- 如果范围更大,最好将选择的值存储到一个排序数组中,检查每个后续随机数是否存在于数组中。这只适用于非常大的范围,因为与第一个示例不同,并非所有可能的值都加载到内存中
$passedValues = array(); for ($i = 0; $i < 10; $i++) { $v; do { $v = rand(1, 100); } while (in_array($passedValues)); $passedValues[] = $v; sort($passedValues); }
$passedValues=array(); 对于($i=0;$i<10;$i++){ $v; 做{ $v=兰特(1100); } while(在数组中($passedValues)); $passedValues[]=$v; 排序($passedValues); }
其他答案提供了一些很好的代码示例。如果数字不太多,请尝试将它们存储到一个数组中,并过滤掉重复的数字。从1-4创建一个数组,然后对数组进行随机排序。如果生成4个随机数,它们甚至可能都是相同的。由于你的射程很短,这种可能性更高。最后你想要什么?数字1-4以随机顺序排列,或者重复次数有限?@Desaroll这只是一个小范围。最后,我想要10个随机数,范围从1到100。如果你的范围在1到100之间,这也会有帮助吗?我的目的是从包含100个问题的数据库中提取10个问题。非常感谢。。这起作用了,我真的明白我在做什么;)真的很感激它,我需要删除我的代码,我现在有这个工作吗?对多个数字执行此操作怎么样?还是你在这里做的?你能解释一下你做了什么吗?我真的不明白为什么要生成并返回$id和$temp[]。请描述您自己,只有代码无法回答问题。此代码用于在指定范围内生成唯一的随机数,这里是“1,4”,它可以是任何值。