Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP或PHPUnit。从下拉列表中选择一个随机选项,不包括所选选项_Php - Fatal编程技术网

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

PHP或PHPUnit。从下拉列表中选择一个随机选项,不包括所选选项,php,Php,如果我的下拉列表有10个选项可供选择,并且选择了选项4,我如何编写代码从1-10中选择选项(不包括4) 我知道rand(1,10)从1到10中选择一个随机数,但它有时会落在4上。我如何确保它不会选择数字4或任何已选择的数字?类似的东西怎么样 <?php $filtered_key = 4; $range = range(1, 10); unset($range[$filtered_key]); $key = array_rand($range); echo $key; 像这样的东西

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


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

类似的东西怎么样

<?php

$filtered_key = 4;

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

echo $key;

像这样的东西怎么样

<?php

$filtered_key = 4;

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

echo $key;

通常,如果您有介于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);
}
?>

通常,如果您有介于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);
}
?>

这与
phpunit
有什么关系?因为我在用phpunit编写测试脚本?@RaymondYan:我在Windows机器上编写PHP代码,你看不到我现在用标签标记我的问题,是吗?这与
phpunit
有什么关系?因为我正在用phpunit编写测试脚本?@RaymondYan:我在Windows机器上编写PHP代码,你看不到我现在用标签标记我的问题,是吗?为什么不生成一个选项数组,并删除不利选项?这适用于任意范围(因为它在恒定时间内运行并使用恒定内存)。如果你的范围很小,有几个经过过滤的数字,你可能更喜欢@SuperSkunk的答案。如果您的范围很大,并且有几个过滤过的数字,则必须使用此方法和一系列不需要的选项来知道要添加到随机值中的数字。这是O(log(不需要的选项列表的大小))。为什么不生成一个选项数组并删除不合适的选项呢?这适用于任意范围(因为它在恒定时间内运行并使用恒定内存)。如果你的范围很小,有几个经过过滤的数字,你可能更喜欢@SuperSkunk的答案。如果您的范围很大,并且有几个过滤过的数字,则必须使用此方法和一系列不需要的选项来知道要添加到随机值中的数字。这是O(log(不需要的选项列表的大小))。