Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中生成多个随机数而不使用相同的随机数_Php - Fatal编程技术网

如何在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”,它可以是任何值。