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的ASP防火墙
Oct 09 PHP
PHP 操作文件的一些FAQ总结
Feb 12 PHP
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
php实现网站插件机制的方法
Nov 10 PHP
基于PHP生成静态页的实现方法
May 10 PHP
PHP生成Gif图片验证码
Oct 27 PHP
Yii框架form表单用法实例
Dec 04 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
PHP生成唯一订单号
Jul 05 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
关于php开启错误提示的总结
Sep 24 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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关联数组的10个操作技巧
2013/01/21 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
web打印小结
2017/01/11 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Django中使用locals()函数的技巧
2015/07/16 Python
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
个人求职简历中英文自我评价
2013/12/16 职场文书
网络程序员自荐信
2014/01/25 职场文书
个人委托书怎么写
2014/04/04 职场文书
教师师德演讲稿
2014/05/06 职场文书
人大调研汇报材料
2014/08/14 职场文书
销售员自我评价
2015/03/11 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang