PHP中生产不重复随机数的方法
PHP内置函数不重复随机数
需求:要生成一个数组,这个数组里面有10个元素,都是整形,并且是1-60之间不重复的随机数。
代码:代码示例:
1234567891011121314<?php
function
get_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<?php
function
get_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 ...
随机推荐
- 浅谈SpringAOP
0. 写在最前面 之前实习天天在写业务,其中有一个业务是非常的复杂,涉及到了特别多的表.最后测下来,一个接口的时间,竟然要5s多. 当时想写一个AOP,来计算处理接口花费多长时间,也就是在业务逻辑的前 ...
- 从2PC到Paxos
在分布式系统中,一个事务可能涉及到集群中的多个节点.单个节点很容易知道自己执行的事务成功还是失败,但因为网络不可靠难以了解其它节点的执行状态(可能事务执行成功但网络访问超时). 若部分节点事务执行失败 ...
- Linux终端会话实时共享(kibitz)
另一篇关于终端会话共享的文章:Linux录制.回放和共享终端操作 kibitz可以将一个会话(你所操作的)实时分享给本机的其它登陆用户(你想让别人看到的).通过这个工具,你敲什么命令,输出了什么内容对 ...
- Tomcat类加载架构
前言 主流的Java Web服务器(Tomcat.Jetty.WebLogic.WebSphere等)都有多个自定义的类加载器以及具备的类加载优势,本篇博文主要是通过以Tomcat为例简单认识Java ...
- SpringBoot系列——aop 面向切面
前言 项目中我们经常会用到aop切面,比如日志记录:这里简单记录一下springboot是如何使用aop spring对aop的配置,来自springboot参考手册,Common applicati ...
- 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如果点 ...
- vb.net 與 SQLite連線
Dim ModuleSql As String Dim n As Integer 'SQLite連線Dim connSQLite As New Data.SQLite.SQLiteConnection ...
- Thinkphp table doesn't exist
系统采用Tp3.2的改造....集群为Mysql双工模式:平时M()主要是操作写,MS操作读...今天在查询 $res =MS("user u")->join("{ ...
- PHP之单例模式
之前记得有写过PHP的几种这模式.这几天看群里在问单列模式,觉得还是有必要再深入写清楚下..其实单例模式很好理解滴哦 单例模式顾名思义,就是只有一个实例,作为对象的创建模式,单例模式确保某一个类只有一 ...
- java回调函数学习
前不久学习了代理模式,其中有一个核心之一是Proxy.newProxyInstance();这里有三个参数, loader:目标对象的类加载器 interfaces:目标对象实现的所有接口组成的数组 ...