0

如果我的下拉菜单有 10 个选项可供选择,并且选择了选项 4,我该如何编写代码以从 1-10 中选择一个选项,但不包括 4?

我知道 rand(1, 10) 会从 1 到 10 中选择一个随机数,但它有时会落在 4 上。如何确保它不会选择数字 4 或任何已经选择的数字?

4

2 回答 2

2

一般来说,如果你有 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] 范围内的任何整数。

于 2012-10-22T21:59:50.077 回答
1

那这样的事情呢?

<?php

$filtered_key = 4;

$range = range(1, 10);
unset($range[$filtered_key]);
$key = array_rand($range);

echo $key;
于 2012-10-22T21:57:12.693 回答