• 生成一定数量的不重复随机数


    01    <?php
    02    /*
    03    * array unique_rand( int $min, int $max, int $num )
    04    * 生成一定数量的不重复随机数
    05    * $min 和 $max: 指定随机数的范围
    06    * $num: 指定生成数量
    07    */
    08    function unique_rand($min, $max, $num) {
    09        $count = 0;
    10        $return = array();
    11        while ($count < $num) {
    12            $return[] = mt_rand($min, $max);
    13            $return = array_flip(array_flip($return));
    14            $count = count($return);
    15        }
    16        shuffle($return);
    17        return $return;
    18    }
    19     
    20    $arr = unique_rand(1, 25, 16);
    21    sort($arr);
    22     
    23    $result = '';
    24    for($i=0; $i < count($arr);$i++)
    25    {
    26        $result .= $arr[$i].',';
    27    }
    28    $result = substr($result, 0, -1);
    29    echo $result;
    30    ?>
    
    程序运行如下:
    1    2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24
    
    补充几点说明:
    
        生成随机数时用了 mt_rand() 函数。这个函数生成随机数的平均速度要比 rand() 快四倍。
        去除数组中的重复值时用了“翻翻法”,就是用 array_flip() 把数组的 key 和 value 交换两次。这种做法比用 array_unique() 快得多。
        返回数组前,先使用 shuffle() 为数组赋予新的键名,保证键名是 0-n 连续的数字。如果不进行此步骤,可能在删除重复值时造成键名不连续,给遍历带来麻烦。
  • 相关阅读:
    cv2 提取图片中的对应颜色
    cv2读取中文路径图片
    时间管理四象限法
    横向领导力摘要
    数据库事务分布式
    跨时钟(CDC)处理
    Mysql show profiles
    Mysql 数值类型
    Mysql 时间日期类型
    Mysql char 和 varchar 的区别
  • 原文地址:https://www.cnblogs.com/afei-happy/p/3376006.html
Copyright © 2020-2023  润新知