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

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

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

UPDATE

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

没有内置函数,但你可以这样做:
  1. function randWithout($from,$to,array $exceptions) {
  2. sort($exceptions); // lets us use break; in the foreach reliably
  3. $number = rand($from,$to - count($exceptions)); // or mt_rand()
  4. foreach ($exceptions as $exception) {
  5. if ($number >= $exception) {
  6. $number++; // make up for the gap
  7. } else /*if ($number < $exception)*/ {
  8. break;
  9. }
  10. }
  11. return $number;
  12. }

这是我的头脑,所以它可以使用抛光 – 但至少你不能最终陷入无限循环的情况,甚至假设.

注意:如果$exceptions耗尽您的范围,则该函数会中断 – 例如调用randWithout(1,2,array(1,2))或randWithout(1,array(0,1,3))将不会产生任何明智的(显然),但在这种情况下,返回的数字将在$from- $到范围之外,所以它很容易被捕获.

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

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

猜你在找的PHP相关文章