我目前正在实现一个系统,它需要为一个人分配一定范围内的数字,但不要使用以前使用过的任何数字。
请记住,数字范围和排除列表都将非常大。
最初,我认为做这样的事情是最好的:
<?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);
?>
所以,我的问题是哪个是更好的选择?是否有其他人以前使用过的另一种(更好)方法来做到这一点?
数组保存大量数据会占用大量内存,您不能使用数据库来保存这些数字吗?这通常是它们的设计目的。