如何从1~N中获取随机值但在PHP中排除几个特定值?

前端之家收集整理的这篇文章主要介绍了如何从1~N中获取随机值但在PHP中排除几个特定值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
rand(1,N)但不包括数组(a,b,c,..),

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

UPDATE

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

没有内置函数,但你可以这样做:
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,array(0,1,3))将不会产生任何明智的(显然),但在这种情况下,返回的数字将在$from- $到范围之外,所以它很容易被捕获.

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

眼睛糖果:Somewhat minimalistic visualisation of the algorithm.

猜你在找的PHP相关文章