php生成不重复随机数组

Author Avatar
yyq 2020-08-23 14:52:16
  • 二维码

php生成不重复随机数组

        没啥说的,直接上基础代码:

        

        /*

        $min 和 $max: 指定随机数的范围

     $num:指定生成数量

    */

        function rand_num($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;                                                                                      

        }


        上面的方法是每次获取随机数存入数组再去重,效率不是很高,新的方法如下:

        function rand_num($num){

            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;

                }

            }

        }

        

        新方法说明 :

        NO1:为数组的每个数字按其下标顺序赋值,获得一个$num个数字键值对应顺序排列的数组;

        NO2:取值范围[$i, $num-1]内的随机数$rand,将数组键值交叉互换,作用是将已经生成的随机数在取值范围[$i, $num-1]中排除,下次会在剩下的数字[$i+1, $num-1]取值

        NO3:为避免重复取值,只在未改变的键值对中进行交替运算,即在原数组顺序排列的位置进行交替运算

上一篇 返回列表 下一篇

发表评论

Tips:评论内容请文明用语