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 相关文章推荐
实现“上一页”和“下一页按钮
Oct 09 PHP
加强版phplib的DB类
Mar 31 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
php 数学运算验证码实现代码
Oct 11 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
php while循环得到循环次数
Oct 26 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
python 获取url中的参数列表实例
2018/12/18 Python
Python如何实现转换URL详解
2019/07/02 Python
python实现桌面托盘气泡提示
2019/07/29 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
Oracle快照(snapshot)
2015/03/13 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
人力资源管理毕业生自荐信
2013/11/21 职场文书
供货协议书范本
2014/04/22 职场文书
全国文明单位申报材料
2014/05/31 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
公证书
2019/04/17 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers