我有这个函数应该生成随机数并确保它们不在例外数组中,但我有这个角落的情况:
它不执行while条件:
Exceptions Array
(
[0] => 84
[1] => 94
[2] => 46
)
print_r ouput :生成的数字是46我们有一个匹配号码即将返回84
所以它首先检查正确但不是递归检查,所以它返回给我一个重复值84,我的条件错了吗?
function randWithout($from, $to, array $exceptions) {
//sort($exceptions); // lets us use break; in the foreach reliably
echo '<pre>';
print_r($exceptions);
echo '</pre>';
$number = mt_rand($from, $to);
print_r('number generated is' . $number);
if(array_search($number,$exceptions) != FALSE)
{
echo 'we have a match';
do {
$number = mt_rand($from, $to);
} while(array_search($number,$exceptions) === FALSE);
}
print_r('number im going to return is'. $number);
return $number;
}
答案 0 :(得分:1)
好的,你应该把它改成:
$ex = [12,18,15];
for($i=0; $i<20;$i++) {
print randWithout(10,20,$ex) . PHP_EOL;
}
function randWithout($from, $to, array $exceptions) {
do {
$number = mt_rand($from, $to);
} while(in_array($number,$exceptions));
return $number;
}
刚试过它并且有效。
答案 1 :(得分:0)
更改为:
if(in_array($number,$exceptions) != FALSE)
{
echo 'we have a match';
do {
$number = mt_rand($from, $to);
} while(in_array($number,$exceptions));
}
从in_array中删除了== FALSE
子句,因为如果找到了针,它将返回true。