网站地图    收藏   

主页 > 后端 > php资料库 >

PHP随机产生一组不重复的数字实现代码_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 在PHP里,要实现这个功能非常容易,没什么技术含量。但哪种执行效率更高一些呢?我写了两种获取随机数的方式。 第一种方式 ?php/** * PHP获取一组随机数字不重复 */$a = microtime();funct...

在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获取一组随机数字不重复

 */
$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,386975
0.00015699999999996

由以上执行结果可以看到,时间根本可以忽略不计,我们把随机数范围从700000调到999999再看看执行结果

392281,822956,401282,176255,143076,501802,393338,546922,21836,601991,362006
0.00013600000000002

执行结果跟最大取数值设置都没有丝毫关系,还是跑的挺快!

有些童鞋可能会问:第二种方式用while循环保险吗?万一产生的随机数有重复不久死循环了吗?

answer:产生的随机数有重复,这肯定会有,但跑到死循环是不会的。

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论