当前位置:Gxlcms > PHP教程 > php如何使用rand生成不重复随机数

php如何使用rand生成不重复随机数

时间:2021-07-01 10:21:17 帮助过:49人阅读

php使用rand生成不重复随机数的方法:首先为数组的每个数字按其下标顺序赋值;然后开始取范围[ i,$num-1 ]范围内的随机数【$rand】,并将获取到的随机数【$rand】作为数组中当前位置;最后在未改变的键值对中进行交替运算。

php使用rand生成不重复随机数的方法:

  1. /*
  2. * array unique_rand( int $min, int $max, int $num )
  3. * 生成一定数量的不重复随机数
  4. * $min 和 $max: 指定随机数的范围
  5. * $num: 指定生成数量
  6. */
  7. function unique_rand($min, $max, $num) {
  8. //初始化变量为0
  9. $count = 0;
  10. //建一个新数组
  11. $return = array();
  12. while ($count < $num) {
  13. //在一定范围内随机生成一个数放入数组中
  14. $return[] = mt_rand($min, $max);
  15. //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。
  16. $return = array_flip(array_flip($return));
  17. //将数组的数量存入变量count中
  18. $count = count($return);
  19. }
  20. //为数组赋予新的键名
  21. shuffle($return);
  22. return $return;
  23. }

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

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

  1. function rand_num($num='200'){
  2. for($i=0;$i<$num;$i++){
  3. $n[$i] = $i;
  4. }
  5. for($i=0;$i<$num;$i++){
  6. $rand = mt_rand($i,$num-1);
  7. //数组 随机数交换下标
  8. if($n[$i] == $i){
  9. $n[$i] = $n[$rand];
  10. $n[$rand] = $i;
  11. }
  12. }
  13. }

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

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

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

4.结束。

1ddd2f17f2af85aaf544c02ee26d4c2.png

相关免费学习推荐:php编程(视频)

以上就是php如何使用rand生成不重复随机数的详细内容,更多请关注gxlcms其它相关文章!

人气教程排行