php生成不重复随机数组
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:为避免重复取值,只在未改变的键值对中进行交替运算,即在原数组顺序排列的位置进行交替运算
