PHP从0-n之间取k个不重复的数

PHP从0-n之间取k个不重复的数

author: he xiaodong date: 2019-04-09

问题是:用代码实现PHP从0-n之间,取k个不重复的数字。

使用 array 系列函数的方法

function getRandomN($max, $num) {
    $count = 0;
    $return = array();
    while ($count < $num) {
        $return[] = mt_rand(0, $max);
        $return = array_flip(array_flip($return));
        $count = count($return);
    }
    shuffle($return);
    return $return;
}

return getRandomN(20, 10);

// output:[7,14,6,12,3,4,15,0,16,10]

不使用 array 系列函数的方法

function getRandomN($num, $n){
    $startArray = range(0, $num);
    $resultArray = [];
    for($i = 0; $i < $n; $i++)
    {
        $random = mt_rand(0, $num - $i);
        $resultArray[$i] = $startArray[$random];
        $startArray[$random] = $startArray[$num - $i - 1];
    }

    return $resultArray;
}

return getRandomN(20, 10);

// output:[7,14,6,12,3,4,15,0,16,10]

大概就是这样的逻辑,主要还是交换 key val 进行去重。

©原创文章