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完整的日历类(CLASS)
Nov 27 PHP
URL Rewrite的设置方法
Jan 02 PHP
PHP 读取文件的正确方法
Apr 29 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
php发送http请求的常用方法分析
Nov 08 PHP
php时间戳转换代码详解
Aug 04 PHP
laravel 获取当前url的别名方法
Oct 11 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
CI框架安全类Security.php源码分析
2014/11/04 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
php和nginx交互实例讲解
2019/09/24 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
vue 过滤器filter实例详解
2018/03/14 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
python将字符串转换成数组的方法
2015/04/29 Python
python访问系统环境变量的方法
2015/04/29 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
Python中@property的理解和使用示例
2019/06/11 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python3实现弹弹球小游戏
2019/11/25 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
学python需要去培训机构吗
2020/07/01 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
模具设计与制造专业应届生求职信
2013/10/18 职场文书
行政助理求职自荐信
2013/10/26 职场文书
动物科学专业求职信
2014/07/27 职场文书
会计简历自我评价
2015/03/10 职场文书
《叶问2》观后感
2015/06/15 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL