随机产生数字往往应用在随机的密码或随机验证码之类上面,PHP中有rand()干扰函数和MD5来实现,下面我们来看一下结合PHP函数来产生一组不重复的数字数组是如何用程序来实现的,直接上代码:
- <?php
-
-
-
-
- $a = microtime();
- function createRandID($m){
-
- $arr = range(1,$m);
-
- shuffle ($arr);
-
- for($i=0;$i<=10;$i++){
-
- $n[] = $arr[$i];
- }
-
- return implode($n,',');
- }
-
- echo createRandID(700000);
- echo '<br />';
- echo $a - microtime();
- ?>
执行结果:
560875,593409,325987,658308,248054,205426,375413,676243,485853,575393,115975
0.672761
由以上结果可以看到,时间花了0.6,我们把随机数范围从700000调到900000再看看执行结果:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 7200000 bytes) in /data0/htdocs/www/a.php on line 10
数组太大程序跑不下了,代码如下:
- <?php
-
-
-
-
- $a = microtime();
- function createRandID($m){
-
- $arr = array();
-
- while(count($arr)<=10){
-
- $a = rand(1,$m);
-
-
- if(!in_array($a,$arr)){
-
- $arr[] = $a;
- }
- }
-
- return implode($arr,',');
- }
- echo createRandID(700000);
- echo '<br />';
- echo $a - microtime();
- ?>
执行结果:
308326,155128,280424,493174,214855,219990,482837,66329,512934,232527,3869750.00015699999999996
由以上执行结果可以看到,时间根本可以忽略不计,我们把随机数范围从700000调到999999再看看执行结果
392281,822956,401282,176255,143076,501802,393338,546922,21836,601991,3620060.00013600000000002
执行结果跟最大取数值设置都没有丝毫关系,还是跑的挺快! |