我正在创建一个自定义的验证码,并且效果很好,但是有时它将从$rand_keys中选择一个大于显示的框数的随机数。 我该如何解决?

$color = array("red", "blue", "yellow", "white", "green", "purple", "brown", "orange", "pink", "black");
$random_num_box = mt_rand(3,8);

$numbers=array(0,1,2,3,4,5,6,7,8,9);

$rand_keys = array_rand($numbers, $random_num_box);
$ran_box =  mt_rand(0, $random_num_box);

echo "Random number of boxes:  ".$random_num_box."<br /><br />";
echo "<div>";
foreach ($rand_keys as $k=>$v) {
    echo "<div style='width: 20px; height: 20px; border: 1px solid #dcdcdc; margin-right: 2px; display: inline-block; background: ".$color[$numbers[$v]].";'></div>";
}
echo "</div>";

echo "<br />What is the color of box # ". ($ran_box + 1) ."?";
echo "<br />Answer:  ".$color[$rand_keys[$ran_box]];

===============>>#1 票数:3 已采纳

问题在于,有时您会随机选择一个大于显示的框数的数字。 这似乎来自以下两行:

$rand_keys = array_rand($numbers, $random_num_box);
$ran_box =  mt_rand(0, $random_num_box);

由于很难模拟,由于随机性,最简单的方法是找到一个示例,证明它不起作用。

从研究中,您会发现array_rand将采用一个数组并根据第二个参数(在本例中$random_num_box随机选择项的数量。 因此,我们有以下数组:

array(
 [0] => 1,
 [1] => 2,
 [2] => 3
)

现在我们继续获得随机答案( $ran_box )。 对于此示例,参数为$random_num_box = 3; 所以运行的命令是

$ran_box =  mt_rand(0, 3);

您将得到一个介于0和3之间的值(包括)。 由于您的数组大小仅为3(0-> 2),因此当您的随机数为3(或$random_num_box )时,您将得到一个错误。 这是由于尝试访问不存在的array[3]

要解决此问题,必须使最大值减小1。

$rand_keys = array_rand($numbers, $random_num_box);
$ran_box =  mt_rand(0, $random_num_box - 1);

===============>>#2 票数:1

我认为您只需要从$ran_box减去1

$ran_box =  mt_rand(0, $random_num_box-1);

  ask by TDave00 translate from so

未解决问题?本站智能推荐: