PHP生成一個不重復隨機數組的封裝方法


<?php

/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定數量的不重復隨機數
* $min 和 $max: 指定隨機數的范圍
* $num: 指定生成數量
*/

//隨機生成不重復的N個數
function unique_rand($min, $max, $num) {
  //初始化變量為0
  $count = 0;
  //建一個新數組
  $return = array();
  while ($count < $num) {
    //在一定范圍內隨機生成一個數放入數組中
    $return[] = mt_rand($min, $max);
    //去除數組中的重復值用了“翻翻法”,就是用array_flip()把數組的key和value交換兩次。這種做法比用 array_unique() 快得多。
    $return = array_flip(array_flip($return));
    //將數組的數量存入變量count中
    $count = count($return);
  }
  //為數組賦予新的鍵名
  shuffle($return);
  return $return;
}

?>

 

補充幾點說明:

生成隨機數時用了 mt_rand() 函數。這個函數生成隨機數的平均速度要比 rand() 快四倍。
去除數組中的重復值時用了“翻翻法”,就是用 array_flip() 把數組的 key 和 value 交換兩次。這種做法比用 array_unique() 快得多。
返回數組前,先使用 shuffle() 為數組賦予新的鍵名,保證鍵名是 0-n 連續的數字。如果不進行此步驟,可能在刪除重復值時造成鍵名不連續,給遍歷帶來麻煩。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM