PHP生成一个随机数组的封装方法

/** array unique_rand( int $min, int $max, int $num )* 生成一定数量的不重复随机数* $min 和 $max: 指定随机数的范围* $num: 指定生成数量*/function unique_rand($min, $max, $num) {//初始化变量为0$count = 0;//建一个新数组$return = array();while ($count < $num) {//在一定范围内随机生成一个数放入数组中$return[] = mt_rand($min, $max);//去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。$return = array_flip(array_flip($return));//将数组的数量存入变量count中$count = count($return);}//为数组赋予新的键名shuffle($return);return $return;}

该方法以每次获取随机数存入数组再去重...效率低下...不想用

PHP高效产生m个n范围内的不重复随机数(m<=n)

注:在《 Programming Pearls 》一书中也有提到,题目为“如何高效产生m个n范围内的不重复随机数(m<=n)”

该算法非常巧妙的取随机数的位置(数组的下标),替代取随机数本身,每次取到一个随机数之后,就将其在取值范围中排除,下一次仅会在剩下的数字中取,一次遍历就可以完成随机数的选取,效率相当高。

function rand_num($num='200'){for($i=0;$i<$num;$i++){$n[$i] = $i;}for($i=0;$i<$num;$i++){$rand = mt_rand($i,$num-1);//数组 随机数交换下标if($n[$i] == $i){$n[$i] = $n[$rand];$n[$rand] = $i;}}}

1、第一步,为数组的每个数字按其下标顺序赋值,获得一个 $num 个数字键值对应顺序排列的数组。

2.第二步,开始取范围[ i,$num-1 ]范围内的随机数$rand,并将获取到的随机数$rand作为数组中当前位置 键i对应下标的值$rand,将数组中 键$rand对应下标的值替换为 i,这其实就是数组键值交叉互换。意义是,将已经生成的随机数在取值范围[ i,$num-1 ]中排除,下次会在剩下的数字中[ i+1,num-1 ]取值。

3.第三步,为避免重复取值,只在未改变的键值对中进行交替运算,即在原数组顺序排列 (键==值) 的位置进行交替运算。

4.结束

1566382090(1).jpg

如上图,获取10个随机数部分试例。

更多PHP相关问题请访问PHP中文网:PHP视频教程

更多相关文章

  1. 使用PHP多维数组重组方法,兼容API接口
  2. php数组去重的方法
  3. php数组实现原理
  4. php对象转数组的函数
  5. php数组转json
  6. php数组打乱顺序
  7. php随机生成不在一个范围随机数
  8. php判断数组某个值是否存在
  9. php检查数组下标是否存在

随机推荐

  1. Android(安卓)使用 HTTPS
  2. Android之应用进程模型
  3. android 控件布局(顶部、底部......) 留
  4. 在Android中创建和使用数据库
  5. Android防止内存溢出浅析
  6. Android JNI 机制
  7. Android 自定义URL Scheme
  8. fanfou(饭否) android客户端 代码学习3
  9. 学习Android(安卓)Opengles 做游戏引擎笔
  10. Google Android 2.0初期版本亮相 支持手