在PHP中创建10,000个非重复随机数

时间:2011-02-09 15:54:31

标签: php random

我需要找到一种在PHP中创建10,000个非重复随机数的方法,然后将其放入数据库表中。号码长度为12位。

这样做的最佳方式是什么?

4 个答案:

答案 0 :(得分:4)

长12位,我认为重复的可能性非常大。我可能只是生成数字,尝试将它们插入到表中,如果它已经存在(假设您对该列有唯一约束),则只生成另一个。

答案 1 :(得分:3)

阅读,例如来自/dev/random 的40000(= PHP_INT_SIZE * 10000)字节,然后将其拆分,模块化(%运算符),然后就可以了。

然后过滤它,并重复该过程。

这避免了太多的系统调用/上下文切换(在php运行时,zend引擎和操作系统本身之间 - 我不打算深入细节)。

这应该是最有效的方式。

答案 2 :(得分:1)

生成10000个随机数并将它们放在一个数组中。通过array_unique运行数组。检查长度。如果小于10000,请添加更多。通过array_unique运行数组。如果大于10000,则通过array_slice运行10000.否则,泡沫,冲洗,重复。

答案 3 :(得分:-1)

这假设您可以毫无问题地生成一个12位数的随机数(使用getrandmax()来查看您可以获得多大的数据....根据php.net,在某些系统上32k是一个很大的数字,你可以得到

$array = array();

while(sizeof($array)<=10000){
  $number = mt_rand(0,999999999999);
  if(!array_key_exists($number,$array)){
     $array[$number] = null;
  }
}

foreach($array as $key=>$val){
  //write array records to db.
}

您可以使用rand()或mt_rand()。但是mt_rand()应该更快。

相关问题