php生成不重复随机数、数组的4种方法分享


Posted in PHP onMarch 30, 2015

下面写几种生成不重复随机数的方法,直接上代码吧

<?php

define('RANDOM_MAX', 100);

define('COUNT', 10);
echo 'max random num: '.RANDOM_MAX, ' ;result count:'.COUNT, '<br/>';
invoke_entry('rand1');

invoke_entry('rand2');

invoke_entry('rand3');

invoke_entry('rand4');
function invoke_entry($func_name) {

 $time = new time();

 $time->time_start();

 call_user_func($func_name);

 echo $func_name.' time spend: ', $time->time_spend();

 echo '<br/>';

}

function rand1() {

 $numbers = range (1, RANDOM_MAX);

 shuffle($numbers); //随机打乱数组

 $result = array_slice($numbers, 1, COUNT);

 return $result;

}

function rand2() {

 $result = array(); 

 while(count($result)< COUNT) {

  $result[] = mt_rand(1, RANDOM_MAX); //mt_rand()是比rand()更好更快的随机函数

  $result = array_unique($result); //删除数组中重复的元素

 }

 return $result;

}

function rand3() {

 $result = array();   

 while(count($result) < COUNT) {

  $_tmp = mt_rand(1, RANDOM_MAX);

  if(!in_array($_tmp, $result)) { //当数组中不存在相同的元素时,才允许插入

   $result[] = $_tmp;

  }

 }   

 return $result;

}

function rand4() {

 $result = array();

 while (count($result) < COUNT) {

  $result[] = mt_rand(1, RANDOM_MAX);

  $result = array_flip(array_flip($result)); //array_flip将数组的key和value交换

 }

 return $result;

}

class time {

 private $_start;

 

 public function time_start() {

  $this->_start = $this->microtime_float();

 }

 public function time_spend() {

  return $this->microtime_float() - $this->_start;

 }

 private function microtime_float() {

  list($usec, $sec) = explode(" ", microtime());

  return ((float)$usec + (float)$sec);

 }

}


?>

 说一下第四种方法,就是翻翻法了,利用array_flip()将数组的键和值翻转,利用php数组特性,重复的键会覆盖,此时再翻转一次,就相同于去掉了重复的值。
以上几种方法只是简单的例子,有的方法适用范围有限。

在看看几种方法的效率:

php生成不重复随机数、数组的4种方法分享

php生成不重复随机数、数组的4种方法分享

用array_unique()在数组较大时性能比较差,当然shuffle()也会受此影响。

PHP 相关文章推荐
javascript 小型动画组件与实现代码
Jun 02 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
PHP中的正则表达式实例详解
Apr 25 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 PHP
PHP加MySQL消息队列深入理解
Feb 27 PHP
smarty模板引擎基础知识入门
Mar 30 #PHP
php array_merge函数使用需要注意的一个问题
Mar 30 #PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 #PHP
PHP实现动态柱状图改进版
Mar 30 #PHP
PHP动态柱状图实现方法
Mar 30 #PHP
php实现的一个简单json rpc框架实例
Mar 30 #PHP
php实现读取内存顺序号
Mar 29 #PHP
You might like
PHP 已经成熟
2006/12/04 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
JSON无限折叠菜单编写实例
2013/12/16 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
python基础教程之对象和类的实际运用
2014/08/29 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python中super函数的用法
2017/11/17 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
Python 统计字数的思路详解
2018/05/08 Python
Python检测数据类型的方法总结
2019/05/20 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
python pygame实现球球大作战
2019/11/25 Python
Python实现画图软件功能方法详解
2020/07/28 Python
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
信息科学与技术专业求职信范文
2014/02/20 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
活动总结范文
2014/08/30 职场文书
法定代表人授权委托书
2014/09/19 职场文书
2014年安全员工作总结
2014/11/13 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
Python中递归以及递归遍历目录详解
2021/10/24 Python
Oracle中DBLink的详细介绍
2022/04/29 Oracle