我有一个数字数组,我需要做一个随机数,然后检查这个数字是否不在数组中。
例如。
array = 1, 2, 4, 5, 7
rand(1, 7) = 3 or 6
如果rand(1,7(=1、2、4、5或7,它将再次运行,直到返回3或6。
有人知道如何在php中做到这一点吗?
您可以简单地生成一个随机数,并检查它是否已经在数组中
$in = [1, 4, 7, 9];
do {
$rand = rand($min, $max);
} while(in_array($rand, $in));
echo $rand, ' is random, but not in the input array';
上述代码生成在$min
和$max
中定义的边界内的随机整数。如果该值已经存在于数组中,则获取新的随机值并将其与输入数组进行比较。
注意:虽然以上是最低限度的工作代码,但如果您的输入数组包含所有可能的值,您可能会创建一个无休止的循环(谢谢@Action Dan(。你没有在问题中说明这是否可能。如果可能的话,你需要解决这个问题。通过限制最大尝试次数,或者在发出错误消息之前验证输入数组,或者增加rand
的第二个参数。
示例(验证,仅推荐用于较小的阵列(:
$in = [1,2,3,4,5];
$min = 1;
$max = 5;
if(range($min, $max) === $in) {
echo 'No possible value in range';
exit;
}
// code from above
<?php
$numbers = array(1,2,3,4,5,6,7);
$rand = rand(1,10);
if (in_array($rand, $numbers))
{
echo "Match found";
}
else
{
echo "Match not found";
}
echo "<br />" . $rand;
?>
在这个例子中,我故意让$rand超过7,只是为了确保代码运行良好,并打印出"Match not found"。。
in_array((函数检查$rand的值是否存在于$numbers中(如果为true(。。如果未打印"未找到匹配",则打印"找到匹配"。
希望这能有所帮助。。