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实现登陆验证码(类似条行码状)
Oct 09 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
初品cakephp 入门基础
Feb 16 PHP
基于PHP静态类的原罪详解
May 06 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
详解PHP数组赋值方法
Nov 07 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 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扩展程序实现守护进程
2015/04/16 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
Javascript 对象的解释
2008/11/24 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
python字典键值对的添加和遍历方法
2016/09/11 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
客服服务心得体会
2013/12/30 职场文书
项目经理聘任书
2014/03/29 职场文书
薪资证明范本
2015/06/19 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电