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 print EOF实现方法
May 21 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
php绝对路径与相对路径之间关系的的分析
Mar 03 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
php生成短域名函数
Mar 23 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
PHP数组相关函数汇总
2015/03/24 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
javascript String 对象
2008/04/25 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
vue实现购物车小案例
2019/09/27 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
python发送邮件实例分享
2017/07/28 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python构造函数init实例方法解析
2020/01/19 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
PHP笔试题
2012/02/22 面试题
幼儿园教师个人反思
2014/01/30 职场文书
优秀员工评优方案
2014/06/13 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
付款委托书范本
2014/10/05 职场文书
2014年保险公司工作总结
2014/11/22 职场文书