思绪:将天生的随机数存入数组,再正在数组中去除了反复的值,便可天生肯定数目的没有反复随机数。
正在PHP网站开发中,有时分咱们需求天生指定范畴内肯定数目的没有反复随机数,详细怎样设计这个消费随机数的函数呢?咱们能够将随机孕育发生的数存入数组,但正在存入的同时去除了反复的值,便可天生肯定数目的没有反复随机数。
也能够把指定范畴内的数值存进数组,再应用shuffle($array)打乱这个数组,而后再截取此中肯定数目的值。但前面的一种做法正在指定的随机数范畴太年夜的时分会孕育发生一个较年夜的数组。
上面给出第一种做法的代码,第二种做法更简略。
<?php /* * array unique_rand( int $min, int $max, int $num ) * 天生肯定数目的没有反复随机数,指定的范畴内整数的数目必需 * 比要天生的随机数数目年夜 * $min 以及 $max: 指定随机数的范畴 * $num: 指定天生数目 */ function unique_rand($min, $max, $num) { $count = 0; $return = array(); while ($count < $num) { $return[] = mt_rand($min, $max); $return = array_flip(array_flip($return)); $count = count($return); } //打乱数组,从新付与数组新的下标 shuffle($return); return $return; } //天生10个1到100范畴内的没有反复随机数 $arr = unique_rand(1, 100, 10); echo implode($arr, ","); ?>
运转后果:48,5,19,36,63,72,82,77,46,16
增补阐明:
一、天生随机数时咱们用了 mt_rand() 函数。这个函数天生随机数的均匀速率要比 rand() 快几倍。
二、去除了数组中的反复值时用了“翻转法”,就是用 array_flip() 把数组的 key 以及 value 替换两次。这类做法正在去除了数组反复值的同时效率也比用 array_unique() 快患上多。
三、前往数组前,先应用 shuffle() 为数组付与新的键名,保障键名是 0-n 延续的数字。假如没有进行此步骤,可能正在删除了反复值时造成键名没有延续,假如用for遍历的时分会有成绩,但若用foreach或没有需求遍历的时分能够没有需求shuffle。
保举教程:PHP视频教程
以上就是php随机天生没有正在一个范畴随机数的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学 随机数 范围
抱歉,评论功能暂时关闭!