• 技术文章 >后端开发 >PHP问题

    php如何生成不重复的数字

    藏色散人藏色散人2020-07-27 09:16:40原创812

    php生成不重复数字的方法:首先初始化变量为0;然后创建一个新数组,并在一定范围内随机生成一个数放入数组中;接着去除数组中的重复值;最后将数组的数量存入变量count中,并为数组赋予新的键名即可。

    推荐:《PHP教程

    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)

    注:在《 Programming 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;
    }
    }
    }

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

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

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

    4.结束。

    顺序排列数组部分交换过程

    企业微信截图_15958119508073.png

    如上图,获取10个随机数部分试例。

    以上就是php如何生成不重复的数字的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:如何解决php支付错误的问题 下一篇:php如何替换换行符
    大前端线上培训班

    相关文章推荐

    • PHP如何去掉重复字符?• php如何取随机数不重复?• php如何生成指定范围内的不重复数字• 分享php生成不重复随机数、数组的4种方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网