2017-02-14 64 views
2

我的问题可能很容易回答。但我无法弄清楚。我怎样才能生成多个随机数字在没有相同的PHP

<?php 
    $id1 = rand(1,4); 
    $id2 = rand(1,4); 
    $id3 = rand(1,4); 
    $id4 = rand(1,4); 
    ?> 

我有这个。但是这有时会创建多个3等。但在我的项目中,这是不可能发生的事情。最后,范围将在1到100之间。但这只是为了测试它如何工作。有人可以帮帮我吗?

+0

如果数字不是太多,请尝试将它们存储到一个数组,并过滤​​掉重复的数字。 –

+4

从1-4创建一个数组,然后对数组进行随机排序。 – David

+0

如果您生成4个随机数,甚至有可能它们都是相同的。与你的短距离,这种可能性更高。最后你想要什么?数字1-4以随机顺序排列,还是有限数量的重复? – Desaroll

回答

1

创建您可以从中选择的一系列值。 随机播放并获取前N个结果。

$range = range(0, 100); 
shuffle($range); 
$n = 10; 
$result = array_slice($range, 0 , $n); 
1

这是什么目的?

但是,也许你可以简单地这样做:

$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 
*/ 

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 
* 
*/ 
+0

如果您的范围在1到100之间,这也有帮助吗? – Thijs

+0

我的目的是从一个数据库中取出10个问题,其中有100个问题。 – Thijs

+0

是的,你想要多少个号码。 –

0

检查这个代码:

$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; 

脚本准备在1-4范围内找到4个随机,唯一的编号。

+0

我是否需要删除我的代码,我现在这个工作?那么为多个数字做这个怎么样?或者你在这里做那个? – Thijs

+0

我的代码中的数字是唯一的。 –

+0

已经找到了一种更简单的方法来做到这一点。还是谢谢:) – Thijs

0
$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 
} 
+0

你能解释你做了什么吗?真的不明白你为什么制作并返回$ id和$ temp []。 – Thijs

+0

请描述你的自我,只有代码不能回答这个问题。 – Kumar

+0

这段代码是在指定范围内生成唯一的随机数,这里是'1,4',它可以是任何东西。 –

0

有实现这一几种方法:

  • 创建给定的范围(使用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); 
    } 
    

其他的答案提供了一些伟大的代码示例。

相关问题