幾種生成隨機數方法

yema發表於2018-11-07

前言

本文摘自 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 陣列中的前幾個數字出現的頻率遠大於後面出現的頻率。
這種隨機選擇可以用於廣告的投放,將某個廣告列表,列表中為廣告和剩餘投放次數的鍵值對。將陣列排序後,會優先投放前面的廣告,從而平衡廣告投放,當然這當中的原理還複雜,不是簡單的隨機數就能解決的。

為什麼我可以這麼的菜?

相關文章