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 相关文章推荐
一个简单实现多条件查询的例子
Oct 09 PHP
php 前一天或后一天的日期
Jun 28 PHP
php标签云的实现代码
Oct 10 PHP
PHP循环结构实例讲解
Feb 10 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
常用PHP框架功能对照表
Oct 23 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
php无限分类使用concat如何实现
Nov 05 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 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
实用函数3
2007/11/08 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP微信分享开发详解
2017/01/14 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
三方合作协议书范本
2014/04/18 职场文书
铣工实训报告
2014/11/05 职场文书
世界环境日活动总结
2015/02/11 职场文书
单身申明具结书
2015/02/26 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android