我需要找到一种在PHP中创建10,000个非重复随机数的方法,然后将其放入数据库表中。号码长度为12位。
这样做的最佳方式是什么?
答案 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()应该更快。