生成范围内的非连续随机数

时间:2019-12-13 06:42:15

标签: php random

我有以下代码

0

此代码在指定范围之间生成随机的n个数字。

但是,它多次返回类似于以下的输出

<?php
function randomGen($min, $max, $quantity) {
    $numbers = range($min, $max);
    shuffle($numbers);
    $tmp = array_slice($numbers, 0, $quantity);
    //sort($tmp);
    return $tmp;
}
echo '<pre>';
$arr = randomGen(2,7,5);
//sort($arr);}
print_r($arr);

在这里2 3 4 5是连续的数字。 我正在尝试修改上面的代码,以使其不会返回超过3个连续数字。输出应与此类似

Array
(
    [0] => 3
    [1] => 4
    [2] => 7
    [3] => 5
    [4] => 2
)

如您所见,它只有3个连续数字5 6 7。

我尝试了以下

Array
(
    [0] => 2
    [1] => 3
    [2] => 5
    [3] => 6
    [4] => 7
)

但是它没有提供预期的输出。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

请看看我们是否可以做这样的事情

function randomGen($min, $max, $quantity,$rangestep) {
    $numbers = range($min, $max,$rangestep);

    $tmp = array_slice($numbers, 0, $quantity);
    sort($tmp);
    shuffle($tmp);
    return $tmp;
}
echo '<pre>';
$arr = randomGen(2,7,5,1);
$count = 0;
$first = $arr[0];
$i = 1;
//for($i = 1; $i < count($arr); $i++) {
$counter = 0;
while ($i < count($arr)) {
  $ele = $arr[$i];
  if ($counter >=3) {
    $counter = 0;
    $arr = randomGen(2,7,8,2);
    $first = $arr[0];
    $i = 1;
  }
   else {
   if ($ele - $first === 1) {
      $counter++;

      //continue;
   }
  $first = $ele;
  }
 $i++;
 } 
  print_r($arr);
 die;