layout: posttitle: PHP从0-n之间取k个不重复的数
subtitle: PHP从0-n之间取k个不重复的数
date: 2019-04-09
author: he xiaodong
header-img: img/default-post-bg.jpg
catalog: true
tags:
- PHP
- 随机数
- array

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

使用 array 系列函数的方法

  1. function getRandomN($max, $num) {
  2. $count = 0;
  3. $return = array();
  4. while ($count < $num) {
  5. $return[] = mt_rand(0, $max);
  6. $return = array_flip(array_flip($return));
  7. $count = count($return);
  8. }
  9. shuffle($return);
  10. return $return;
  11. }
  12. return getRandomN(20, 10);
  13. // 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 进行去重。

©原创文章

最后恰饭 阿里云全系列产品/短信包特惠购买 中小企业上云最佳选择 阿里云内部优惠券