random_int而不是没有双精度的循环中的array_rand

时间:2017-11-09 04:33:31

标签: php random

我正在尝试为我经常玩的乐透创造一个发电机 乐透是一个 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()生成一个随机数,但要确保它在该次运行中不再生成相同的数字。

2 个答案:

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