PHP高效生成一个不重复随机数-php教程

资源魔 38 0
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)

注:正在《 Progra妹妹ing 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;
}
}
}

一、第一步,为数组的每一个数字按其下标程序赋值,取得一个 $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视频教程

以上就是PHP高效天生一个没有反复随机数的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 随机数

抱歉,评论功能暂时关闭!