不在数组中的随机数


Random number thats not in array

我有一个数字数组,我需要做一个随机数,然后检查这个数字是否不在数组中。

例如。

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(。。如果未打印"未找到匹配",则打印"找到匹配"。

希望这能有所帮助。。