如果我的下拉菜单有 10 个选项可供选择,并且选择了选项 4,我该如何编写代码以从 1-10 中选择一个选项,但不包括 4?
我知道 rand(1, 10) 会从 1 到 10 中选择一个随机数,但它有时会落在 4 上。如何确保它不会选择数字 4 或任何已经选择的数字?
如果我的下拉菜单有 10 个选项可供选择,并且选择了选项 4,我该如何编写代码以从 1-10 中选择一个选项,但不包括 4?
我知道 rand(1, 10) 会从 1 到 10 中选择一个随机数,但它有时会落在 4 上。如何确保它不会选择数字 4 或任何已经选择的数字?
一般来说,如果你有 1 和 n 之间的选项,并且选择了第 m 个选项,你可以使用以下算法在 1 和 n 之间均匀随机生成一个数字,不包括 m:
<?php
function get_rand($n,$m)
{
$r = rand(1,$n-1); //generate one of $n-1 numbers since $m is not selectable
if($r >= $m) //if $r is smaller than $m we're done
$r++; //otherwise add one to $r
return($r);
}
?>
在您的情况下,n=10 和 m=4,我们将生成一个介于 1 和 9 之间的数字。如果它在 [1,3] 范围内,我们将返回该数字。如果它在 [4,9] 范围内,我们将添加 1 并返回 [5,10] 范围内的数字。这意味着我们以相同的概率返回 [1,3] U [5,10] 范围内的任何整数。
那这样的事情呢?
<?php
$filtered_key = 4;
$range = range(1, 10);
unset($range[$filtered_key]);
$key = array_rand($range);
echo $key;