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 得到根目录的 __FILE__ 常量
Jul 23 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
使用php-timeit估计php函数的执行时间
Sep 06 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 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自定义apk安装包实例
2014/10/20 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
Python中使用不同编码读写txt文件详解
2015/05/28 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
python分布式计算dispy的使用详解
2019/12/22 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
军训自我鉴定
2014/01/22 职场文书
学校班班通实施方案
2014/06/11 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
加薪申请报告范本
2015/05/15 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers
python标准库ElementTree处理xml
2022/05/20 Python