x和y之间的随机数,不包括其间的数字范围

时间:2012-04-30 15:20:20

标签: php random

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

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

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

所以,我的问题是哪个更好?是否有其他(更好)的方式来做这个以前曾经使用过的人?

1 个答案:

答案 0 :(得分:2)

拥有大量数据的数组会占用大量内存,你能否使用数据库来保存这些数字?这通常是他们的目的。