PHP或PHPUnit。从下拉列表中选择随机选项,不包括选定的一个

时间:2012-10-22 21:52:07

标签: php

如果我的下拉列表中有10个选项可供选择,并且选择了选项4,那么如何编写代码以从1-10中选择一个选项,包括4?

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

2 个答案:

答案 0 :(得分: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]中的任何整数。

答案 1 :(得分:1)

那样的事情呢?

<?php

$filtered_key = 4;

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

echo $key;