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 相关文章推荐
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
PHP 解决session死锁的方法
Jun 20 PHP
php一个解析字符串排列数组的方法
May 12 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP滚动日志的代码实现
Jun 10 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP addcslashes()函数讲解
Feb 03 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
PHP6新特性分析
2016/03/03 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
jQuery事件用法详解
2016/10/06 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
JS实现选项卡效果的代码实例
2019/05/20 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
python爬虫 正则表达式解析
2019/09/28 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
大学毕业的自我鉴定
2013/10/08 职场文书
自荐信的五个重要部分
2013/10/29 职场文书
车辆工程专业求职信
2014/04/28 职场文书
岗位说明书怎么写
2014/07/30 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
特岗教师个人总结
2015/02/10 职场文书
明确岗位职责
2015/02/14 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
MySql数据库触发器使用教程
2022/06/01 MySQL