1

我正在实现一个系统,它需要将某个范围内的数字分配给一个人,但不使用以前使用过的任何数字。
请记住,数字范围和排除列表都将非常大。

最初,我认为做这样的事情是最好的:

<?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);
?>

所以,我的问题是哪个是更好的选择?还有其他人以前使用过的(更好的)方法吗?

4

1 回答 1

2

数组保存大量数据会占用大量内存,难道不用数据库来保存这些数字吗?这通常是它们的设计目的。

于 2012-04-30T15:22:50.033 回答