西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > php教程 >

PHP中随机产生一组不重复的数字实现程序

时间:2016-01-31 23:01来源: 作者: 点击:
PHP中有rand()干扰函数和MD5来实现随机,看一下结合PHP函数来产生一组不重复的数字数组是如何用程序来实现的,代码: ?php /** * PHP获取一组随机数字不重复 */ $a = microtime(); function createR
PHP中有rand()干扰函数和MD5来实现随机,看一下结合PHP函数来产生一组不重复的数字数组是如何用程序来实现的,代码:
 
<?php  
 
/**  
 * PHP获取一组随机数字不重复  
 */ 
$a = microtime();  
function createRandID($m){  
    // 产生一个从1到$m的数组  
    $arr = range(1,$m);  
    // 打乱数组  
    shuffle ($arr);   
    // 取前十个  
    for($i=0;$i<=10;$i++){  
        // 赋值给新数组$n  
        $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  
/**  
 * PHP获取一组随机数字不重复  
 * PHP博客  
 */ 
$a = microtime();  
function createRandID($m){  
    // 注意,要先声明一个空数组,否则while里的in_array会报错  
    $arr = array();  
    // 使用while循环,只要不够10个就永远循环  
    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
 
执行结果跟最大取数值设置都没有丝毫关系,php随机还是跑的挺快!
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容