旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

PHP高效生成一个不反复随机数【php教程】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP教程浏览:80


导读:PHP生成一个随机数组的封装要领/**arrayunique_rand(int$min,int$max,int$num)*生成肯定数目的不反复随机数...
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.完毕

如上图,猎取10个随机数部份试例。

更多PHP相干题目请接见ki4网:PHP视频教程

以上就是PHP高效生成一个不反复随机数的细致内容,更多请关注ki4网别的相干文章!

标签:随机数