1

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

  • 每一个都是独一无二的
  • 数字是 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;

我只是不太确定如何订购它们,而且数字是独一无二的。

4

6 回答 6

6

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

例子:

$values = range(1,49);

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

print "Your results: ".implode(', ',$values);
于 2013-09-09T13:00:52.983 回答
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

一些有用的文献:

于 2013-09-09T13:01:53.567 回答
2
$numbers = range(1, 49);
shuffle($numbers);
$numbers = array_slice($numbers, 0, 5);
sort($numbers);
foreach ($i=0; $i<6; $i++) {
    echo $numbers[$i]." ";
}

范围随机播放

于 2013-09-09T13:03:44.400 回答
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." ";
        }
于 2013-09-09T13:14:42.330 回答
0

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

1) 生成不存在的数字

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

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

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

例如,当您有范围 1-49(含)和数字 [4, 8, 6, 15] 时,您会从 1-45(含)生成数字,因为只剩下 45 个空闲数字。假设您生成了 8,这意味着 8ht 空闲数,并且由于 4、8 和 6 已经增加了 3 倍,您得到了 11,但是这需要您的数组一直进行排序。

3) 和@hexblot 说的一样

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

于 2013-09-09T13:13:42.213 回答
0

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

$numbers = range(1, 49);
shuffle($numbers);
$picks = array_slice($numbers, 0, 6);
sort($picks);
于 2013-09-09T13:04:06.140 回答