如何从1~N中获取随机值但在PHP中排除几个特定值?
发布时间:2020-12-13 22:35:26 所属栏目:PHP教程 来源:网络整理
导读:rand(1,N)但不包括数组(a,b,c,..), 是否已经有一个我不知道的内置函数,或者我必须自己实现它(如何?)? UPDATE 无论排除数组的大小是否大,合格的解决方案都应具有黄金性能. 没有内置函数,但你可以这样做: function randWithout($from,$to,array $exceptions
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |