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 事务处理数据实现代码
May 13 PHP
PHP学习 变量使用总结
Mar 24 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
Sep 23 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
浅谈Laravel中使用Slack进行异常通知
May 29 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
php报错502badgateway解决方法
2019/10/11 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
Python实现密码薄文件读写操作
2019/12/16 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
小学生优秀评语大全
2014/04/22 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
团代会邀请函
2015/02/02 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
汉语拼音教学反思
2016/02/22 职场文书
python 逐步回归算法
2021/04/06 Python
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
python基础之模块的导入
2021/10/24 Python