php生成不重复随机数、数组的4种方法分享
下面写几种生成不重复随机数的方法,直接上代码吧
<?php define('RANDOM_MAX',100); define('COUNT',10);
echo'maxrandomnum:'.RANDOM_MAX,';resultcount:'.COUNT,'<br/>';
invoke_entry('rand1'); invoke_entry('rand2'); invoke_entry('rand3'); invoke_entry('rand4');
functioninvoke_entry($func_name){ $time=newtime(); $time->time_start(); call_user_func($func_name); echo$func_name.'timespend:',$time->time_spend(); echo'<br/>'; } functionrand1(){ $numbers=range(1,RANDOM_MAX); shuffle($numbers); //随机打乱数组 $result=array_slice($numbers,1,COUNT); return$result; } functionrand2(){ $result=array(); while(count($result)<COUNT){ $result[]=mt_rand(1,RANDOM_MAX); //mt_rand()是比rand()更好更快的随机函数 $result=array_unique($result);//删除数组中重复的元素 } return$result; } functionrand3(){ $result=array(); while(count($result)<COUNT){ $_tmp=mt_rand(1,RANDOM_MAX); if(!in_array($_tmp,$result)){ //当数组中不存在相同的元素时,才允许插入 $result[]=$_tmp; } } return$result; } functionrand4(){ $result=array(); while(count($result)<COUNT){ $result[]=mt_rand(1,RANDOM_MAX); $result=array_flip(array_flip($result)); //array_flip将数组的key和value交换 } return$result; } classtime{ private$_start; publicfunctiontime_start(){ $this->_start=$this->microtime_float(); } publicfunctiontime_spend(){ return$this->microtime_float()-$this->_start; } privatefunctionmicrotime_float(){ list($usec,$sec)=explode("",microtime()); return((float)$usec+(float)$sec); } }
?>