我需要从31到359之间选择一个随机数。
rand(31, 359);
我需要数字不属于此数字数组:
$badNumbers = array(30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360);
我该怎么做?
谢谢。
答案 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];