随机数不在数组中

时间:2014-07-03 00:15:06

标签: php

我有一个数字数组,我需要制作一个随机数,然后检查该数字是否不在数组中,如果它是另一个随机数,然后检查该数字以查看它是否在数组中。

例子。

array = 1, 2, 4, 5, 7
rand(1, 7) = 3 or 6

如果rand(1,7)= 1,2,4,5或7,它将再次运行,直到它返回3或6.

任何人都知道如何在PHP中执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以简单地生成一个随机数并检查它是否已经在数组中

$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

答案 1 :(得分:1)

<?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个,只是为了确保代码运行良好并且打印出“未找到匹配”..

in_array()函数检查$ rand的值是否存在于$ numbers中如果为true ..打印“匹配找到”如果没有打印“匹配未找到”。

希望这会有所帮助..