随机数字顺序+独特的PHP

时间:2013-09-09 12:58:37

标签: php

我正在尝试创建一个具有以下功能的随机数生成器:

  • 每一个都是独一无二的
  • 数字为1或49,全部在
  • 之间
  • 从最低到最高订购

这是我到目前为止所拥有的

$numbers = rand(1, 49)." ".rand(1, 49)." ".rand(1, 49)." ".rand(1, 49)." ".rand(1, 49)." ".rand(1, 49);

echo "Your Lucky Lotto Numbers Are: ".$numbers;

我只是不太确定如何订购它们,加上数字是唯一的。

6 个答案:

答案 0 :(得分:6)

只需创建一个包含1到49之间所有数字的数组,然后开始随机删除元素。只留下您需要的元素数量。这样,它们已经整齐有序,绝对是独一无二的。

示例:

$values = range(1,49);

while(count($values)>6) {
  unset($values[array_rand($values)]);
}

print "Your results: ".implode(', ',$values);

答案 1 :(得分:2)

你应该使用一个数组:

$numbers = range(1, 49); //generate the array
shuffle($numbers); //shuffle the array
$numbers = array_slice($numbers, 0, 6); // cut the array in the appopriate length

echo "Your Lucky Lotto Numbers Are: ";
print_r(asort($numbers)); //sort and print

一些有用的文献:

答案 2 :(得分:2)

$numbers = range(1, 49);
shuffle($numbers);
$numbers = array_slice($numbers, 0, 5);
sort($numbers);
foreach ($i=0; $i<6; $i++) {
    echo $numbers[$i]." ";
}

Range&amp; Shuffle

答案 3 :(得分:0)

用你的数字取一个数组,取6个随机数(或随机数组,先选6个),对你挑选的数字进行排序。效率不高,但绝对应该有效:

$numbers = range(1, 49);
shuffle($numbers);
$picks = array_slice($numbers, 0, 6);
sort($picks);

答案 4 :(得分:0)

至少有3种方法可以做到这一点:

1)生成不存在的数字

您创建数组并向其添加随机数。如果新生成的数字已经在该数组中,则生成另一个数据(依此类推,直到它是唯一的,在循环中检查它),然后对其进行排序。我会推荐这个

2)所有现有较低数字的增量

对于每个新的随机数,您将最大值降低1,然后在添加此数字时,为数组中的每个较低数字递增

例如,当你有1-49(含)和数字[4,8,6,15]时,你会产生1-45(含)的数字,因为只剩下45个空闲数字。假设您生成了8,这意味着8ht的自由数,并且因为4,8和6已经增加了三次并且你有11次,但是这需要你的数组一直被排序。

3)与@hexblot相同

如果数量的数量小于数字范围(即1-49的10个数字 - 10%不是很多),我会选择1因为它的简单并且你没有得到相同的选择

答案 5 :(得分:0)

可能有点广泛,但这会给你6个独特的排序数字

$arr = array();
while ( count($arr) < 6 ) {
    $x = mt_rand(1,49);
    if ( !in_array($x,$arr) ) {
        $arr[] = $x;
        asort($arr);
    }
}
foreach($arr as $x){
        echo $x." ";
        }