我正在尝试为我经常玩的乐透创造一个发电机 乐透是一个 5数字抽奖,范围从数字1-50 和相同的数字不能再出现。
我目前的做法是使用array_rand()
,但经过一些阅读后我注意到我不应该使用array_rand()
来实现此目的,而应该使用random_int()
。
我目前的方法如下:
$numbers = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50);
for ($i = 0; $i <= 4; $i++) {
$number = array_rand($numbers);
unset($numbers[$number]);
if ($number == 0) {
$number = array_rand($numbers);
unset($numbers[$number]);
}
$out1[] = array("<div class=\"number\">$number</div>");
}
正如您在上面所看到的,这是有效的,它可以生成5个数字而不会重复,因为我在绘制数字后取消设置数字。
我的问题是:
如何使用random_int()
代替上述内容?
澄清:使用random_int()
生成一个随机数,但要确保它在该次运行中不再生成相同的数字。
答案 0 :(得分:1)
$numbers = array(); // Create an empty array
while (count($numbers) < 5) { // While less than 5 items in the array repeat the following
$random = random_int(1,50); // Generate a random number
if (!in_array($random, $numbers)) { // Check if the random number is already in the array, and if it is not then:
$numbers[] = $random; // add the random number to the array
}
}
foreach ($numbers as $n) { // Loop over your array and output with your added HTML
echo "<div class=\"number\">$n</div>";
}
答案 1 :(得分:0)
以下是这样的:
$out = [];
$used = [];
for ($i = 0; $i <= 4; $i++) {
do {
$randInt = random_int(1, 50);
} while (in_array($randInt, $used));
$used[] = $randInt;
$out[] = "<div class=\"number\">$randInt</div>";
}