如何在PHP中生成多个随机数而不必相同

时间:2017-02-14 14:07:57

标签: php

我的问题可能很容易回答。但我无法弄清楚。

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

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

5 个答案:

答案 0 :(得分: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
 */

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

答案 1 :(得分:1)

创建一系列您可以选择的值。 将它洗牌并取得前N个结果。

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

答案 2 :(得分: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个随机的唯一数字。

答案 3 :(得分:0)

$quote->setCustomerId(null)
        ->setCustomerEmail($quote->getBillingAddress()->getEmail())
        ->setCustomerIsGuest(true)
        ->setCustomerGroupId(Group::NOT_LOGGED_IN_ID);
$quote->collectTotals();
$orderId = $this->cartManagement->placeOrder($quote->getId());

答案 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);
    }
    

其他答案提供了一些很棒的代码示例。