我正在尝试创建一个具有以下功能的随机数生成器:
这是我到目前为止所拥有的
$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;
我只是不太确定如何订购它们,加上数字是唯一的。
答案 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
一些有用的文献:
foreach
:http://php.net/manual/en/control-structures.foreach.php 答案 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]." ";
}
答案 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." ";
}