选择一个不是PHP中一组数字的随机数

时间:2019-06-25 20:20:23

标签: php arrays

我需要从31到359之间选择一个随机数。

rand(31, 359);

我需要数字不属于此数字数组:

$badNumbers = array(30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360);

我该怎么做?

谢谢。

3 个答案:

答案 0 :(得分:3)

您需要的是递归函数(该函数会不断调用自身,并在满足要求时就发出条件),或者是一个无限循环,当找到一个数字不在数组中。这意味着您尝试生成一个数字,但是如果该数字在列表中,则请重试-一直这样做直到满意为止。

这是一个例子,

$badNumbers = array(30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360);

function rand_unique(array $array, int $new) {
    if (in_array($new, $array)) {
        return rand_unique($array, $new);
    }
    return $new;
}
$newRand = rand_unique($badNumbers, rand(31, 359));
echo $newRand;

答案 1 :(得分:3)

我可能会这样做,因为它会在找到一个时完成:

while(in_array($rand = rand(31, 359), $badNumbers));
echo $rand;

这是使用数组的另一种方式:

$good  = array_diff(range(31, 359), $badNumbers);
echo $good[array_rand($good)];

或随机选择一个:

shuffle($good);
echo array_pop($good);

如果您需要选择多个随机数,则数组方法很有用。再次考虑array_rand,或者再考虑array_slice

答案 2 :(得分:0)

这将创建一个仅包含良好数字的数组,并返回一个随机值。

$goodNumbers = array_diff(range(31,359),[$badNumbers]);
$randIndex = array_rand($goodNumbers);
$randomGoodNumber = $goodNumbers[$randIndex];