前言
本文摘自 PHP 經典例項
解決方案
在 $lower 和 $upper 之間生成隨機數,包括 $lower 和 $upper
$lower = 65;
$upper = 95;
mt_rand( $lower,$upper )
在效能方面, mt_rand() 比 rand() 快大概四倍。
應用場景
如果想在頁面上顯示一個隨機的圖片,隨機設定遊戲的開始位置,從資料庫選擇一個隨機的記錄的時候,或者生成唯一的一個會話標識字元。
mt_rand() 如果不傳入引數,預設生成 0 到最大隨機數之間的一個數,最大的隨機數由 mt_getrandmax() 返回。
生成偏隨機數
生成隨機數,但又希望希望生成的隨機數有些偏向性,使某個範圍內的數出現的頻率高於其他的數。
$numbers = [1,2,3,4,5,6];
$total = 0;
foreach($numbers as $k => $v){
$total += $v;
$dis[$k] = $total;
}
// $total = 21
// $dis = [ 1 => 1, 2 => 3, 3 => 6, 4 => 10, 5 => 15, 6 => 21 ];
$rand = mt_rand( 0,$total-1 );
foreach($dis as $k => $v){
if($rand > $v){
echo $k;
}
}
上面的函式的 $numbers 陣列中的前幾個數字出現的頻率遠大於後面出現的頻率。
這種隨機選擇可以用於廣告的投放,將某個廣告列表,列表中為廣告和剩餘投放次數的鍵值對。將陣列排序後,會優先投放前面的廣告,從而平衡廣告投放,當然這當中的原理還複雜,不是簡單的隨機數就能解決的。