我正在实施一个系统,需要在某个范围内为一个人分配一个号码,但不能使用以前使用过的任何号码。
请记住,数字范围和排除列表都会非常大。
最初,我认为做这样的事情是最好的:
<?php
$start = 1;
$end = 199999;
$excluded = array(4,6,7,8,9,34);
$found = FALSE;
while (!$found) {
$rand = mt_rand($start,$end);
if (!in_array($rand,$excluded)) {
$found = TRUE;
}
}
?>
但我不认为这是理想的,有可能存在无限循环(或者需要很长时间/超时)。
我还想过生成一个我需要的所有数字的数组,但是一个庞大的阵列肯定会更糟吗?在2个大型阵列上做数组差异肯定也需要很长时间吗? 像这样:
<?php
$start = 1;
$end = 199999;
$allnums = range($start,$end);
$excluded = array(4,6,7,8,9,34);
$searcharray = array_diff($allnums,$excluded);
$rand = array_rand($searcharray);
?>
所以,我的问题是哪个更好?是否有其他(更好)的方式来做这个以前曾经使用过的人?
答案 0 :(得分:2)
拥有大量数据的数组会占用大量内存,你能否使用数据库来保存这些数字?这通常是他们的目的。