gpt4 book ai didi

php - PHP如何获取1~N的随机值但不包括几个特定值?

转载 作者:可可西里 更新时间:2023-11-01 13:02:26 26 4
gpt4 key购买 nike

rand(1,N) 但不包括 array(a,b,c,..),

是否已经有一个我不知道的内置函数,或者我必须自己实现它(如何实现?)?

更新

无论排除数组的大小是否大,合格的解决方案都应该具有黄金性能。

最佳答案

没有内置函数,但您可以这样做:

function randWithout($from, $to, array $exceptions) {
sort($exceptions); // lets us use break; in the foreach reliably
$number = rand($from, $to - count($exceptions)); // or mt_rand()
foreach ($exceptions as $exception) {
if ($number >= $exception) {
$number++; // make up for the gap
} else /*if ($number < $exception)*/ {
break;
}
}
return $number;
}

这超出了我的想象,所以它可以使用抛光 - 但至少你不会陷入无限循环场景,即使是假设也是如此。

注意:如果$exceptions用尽您的范围,函数将中断 - 例如调用 randWithout(1, 2, array(1,2))randWithout(1, 2, array(0,1,2,3)) 不会产生任何结果明智的(显然),但在那种情况下,返回的数字将在 $from-$to 范围之外,因此很容易捕捉。

如果 $exceptions 已保证已排序,则可以删除 sort($exceptions);

养眼:Somewhat minimalistic visualisation of the algorithm .

关于php - PHP如何获取1~N的随机值但不包括几个特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2698265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com