当前位置: 无忧屋首页 > 文章中心 > PHP >

PHP指定范围内且不重复的随机值方法

来源:网络

发布人:天道酬勤

发布时间:2024-02-17

代码案列
生成10个1到100范围内的不重复随机数

  1. <?php
  2. /*
  3. * array unique_rand( int $min, int $max, int $num )
  4. * 生成一定数量的不重复随机数,指定的范围内整数的数量必须
  5. * 比要生成的随机数数量大
  6. * $min 和 $max: 指定随机数的范围
  7. * $num: 指定生成数量
  8. */
  9. function unique_rand($min, $max, $num) {
  10.   $count = 0;
  11.   $return = array();
  12.   while ($count < $num) {
  13.     $return[] = mt_rand($min, $max);
  14.     $return = array_flip(array_flip($return));
  15.     $count = count($return);
  16.   }
  17.   //打乱数组,重新赋予数组新的下标
  18.   shuffle($return);
  19.   return $return;
  20. }
  21.   
  22. $arr = unique_rand(1, 100, 10);
  23. echo implode($arr, ",");
  24. ?>
程序运行如下:
  1. 48,5,19,36,63,72,82,77,46,16
代码说明
1、生成随机数时我们用了 mt_rand() 函数。这个函数生成随机数的平均速度要比 rand() 快几倍。

2、去除数组中的重复值时用了“翻转法”,就是用 array_flip() 把数组的 key 和 value 交换两次。这种做法在去除数组重复值的同时效率也比用 array_unique() 快得多。

3、返回数组前,先使用 shuffle() 为数组赋予新的键名,保证键名是 0-n 连续的数字。如果不进行此步骤,可能在删除重复值时造成键名不连续,如果用for遍历的时候会有问题,但如果用foreach或不需要遍历的时候可以不需要shuffle。

免责声明:文中图文均系网友发布,转载来自网络,如有侵权请联系右侧客服QQ删除,无忧屋网友发布此文仅为传递信息,不代表无忧屋平台认同其观点。