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 相关文章推荐
用 PHP5 轻松解析 XML
Dec 04 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
PHP在线书签系统分享
Jan 04 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
如何使用php等比例缩放图片
Oct 12 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
php常用的url处理函数总结
2014/11/19 PHP
PHP Reflection API详解
2015/05/12 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Python自定义线程池实现方法分析
2018/02/07 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
Python线程指南分享
2019/11/19 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
如何在Python对Excel进行读取
2020/06/04 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
主治医师岗位职责
2013/12/10 职场文书
元旦活动感言
2014/03/08 职场文书
购房委托书
2014/10/15 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript