PHP中生产不重复随机数的方法
PHP内置函数不重复随机数
需求:要生成一个数组,这个数组里面有10个元素,都是整形,并且是1-60之间不重复的随机数。
代码:代码示例:
1234567891011121314<?phpfunctionget_randoms($min,$max,$num){$count= 0;$res=array();while($count<$num){$res[] = mt_random($min,$max);$res=array_flip(array_flip($res));$count=count($res);}return$res;}$result= get_randoms(1,60,10);?>在这里 他用$count 结果数组的个数,他在while 循环中 使得结果数组的个数小于 目标个数。通过这样,获取到$count 是 目标个数 的一个数组。
期间,每一个循环中,通过mt_random($min,$max),随机出区间内的一个值,存放到数组$res中,然后通过两次key-value 交换,也就是通过数组key的唯一性,使得做到不重复。
我看了这个逻辑的代码之后,我不禁陷入了深思,假如说当你不知道array_filp 函数的时候你怎么做?
说白了就是用key的唯一性,使得随机数不会存在重复。那么我们能不能将这个问题简单化处理呢?代码示例:
12345678910111213<?phpfunctionget_randoms($min,$max,$num){$count= 0;$res=array();while($count<$num){$key= mt_random($min,$max);$res[$key] =$key;$count=count($res);}return$res;}$result= get_randoms(1,60,10);?>这样完全是单独的通过数组key的唯一性 解决了这个问题。根本就不会用到array_flip。
总结:
1,因为php提供了大量的内置函数,他们的执行效率都很高。在遇到问题的时候,尽可能去用它去解决问题。这样方便而且快速。2,php 提供了大量的内置函数,执行效率也很高,但是,虽然效率高,还是需要时间去执行的。
在遇到问题的时候,不要盲目的去做,可以先看清处理方法的本质,以便于巧妙的实现他。
PHP中生产不重复随机数的方法的更多相关文章
- PHP:产生不重复随机数的方法
来源:http://www.ido321.com/1217.html 无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地.在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道, ...
- JAVA中生成指定位数随机数的方法总结
JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...
- PHP生成不重复随机数的方法
无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地.在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下. 方法一: ...
- JS判断数组中是否有重复元素的方法
判断数组中是否有重复元素,最容易想到的方法是使用2重循环,逐个遍历,比较,但是这个是最慢,最笨的方法,百度得出了更好的方法. var ary = new Array("111",& ...
- C#生成不重复随机数的方法
在使用Random类生成随机数时,我们可能会碰到生成随机数重复的问题. 比如我们要生成6位数字验证码,虽然也是使用Random,但是可能出现111111,999999这样的情况. 这是因为在实例化Ra ...
- iOS-objective-c产生随机数的方法
objective-c 中三种产生随机数的方法 //arc4random() 比较精确不需要生成随即种子 //通过arc4random() 获取0到x-1之间的整数的代码如下: int val ...
- 使用C++生成1-33中的6个随机数,无重复
生成1-33中的6个随机数,无重复 ------------------------------------------------------------------------ 方法1.每生成 ...
- PHP产生不重复随机数的5个方法总结
无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地.在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下 无论是We ...
- JS数组常用函数以及查找数组中是否有重复元素的三种常用方法
阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法 1. var ary = new Array(&qu ...
随机推荐
- TensorFlow中的并行执行引擎——StreamExecutor框架
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在前一篇文章中,我们梳理了TensorFlow中各种异构Device的添加和注 ...
- Django 系列博客(六)
Django 系列博客(六) 前言 本篇博客介绍 Django 中的路由控制部分,一个网络请求首先到达的就是路由这部分,经过路由与视图层的映射关系再执行相应的代码逻辑并将结果返回给客户端. Djang ...
- linux的文档和目录结构
在Linux底下,所有的文件与目录都是由根目录开始,是目录与文件的源头,然后一个个的分支下来,如同树枝状,因此称为这种目录配置为:目录树. 目录树的特点是什么呢? 目录树的起始点是根目录(/,root ...
- SET NOCOUNT { ON | OFF }
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数) SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数. 当 SET NOC ...
- c#调用腾讯云API的实例
//获取时间戳 .net framework /* DateTime dt = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1 ...
- 线程 线程池 Task
首先声明 这是读了 愉悦的绅士 文章 <菜鸟之旅——学习线程(线程和线程池)> <Task与线程> 的一些个人总结,还是那句话,如有不对,欢迎指正 文章以代码加注释的方法展示. ...
- mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决
mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决
- (5)Microsoft office Word 2013版本操作入门_标尺
1.标尺 :左缩进,右缩进,悬挂缩进,首行缩进,阴影部分 可以左右拖拽调整边缘. 1.1 左缩进:默认缩进所在的段落,要缩进多段则需要多段落选中, 后拖动左缩进. 1.2 首行缩进缩进或者突出所选的 ...
- Spring Boot(Spring的自动整合框架)
Spring Boot 是一套基于Spring框架的微服务框架,由于Spring是一个轻量级的企业开发框架,主要功能就是用于整合和管理其他框架,想法是将平时主流使用到的框架的整合配置预先写好,然后通过 ...
- Python中的特殊属性与方法
模块的特殊属性 __doc__ 模块的说明文档 __all__ 指明模块希望被使用的属性.类和方法 __file__ 模块所在路径 类的特殊属性 __slots__ 限制类的实例允许添加的属性,是一个 ...