问题是:用代码实现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 进行去重。
©原创文章