利用 mt_rand(0, 100) 產生 0–100 的均勻隨機整數,透過區間劃分實現機率分布:
"; // 約 19,999 echo "B: $b
"; // 約 29,999 echo "C: $c
"; // 約 50,000 ?>
A: 19589 B: 29795 C: 50615
統計值極接近理論機率(20% / 30% / 50%),大數法則驗證無誤。
/**
* 依權重陣列回傳對應鍵名
* @param array $weights ['A' => 20, 'B' => 30, 'C' => 50]
* @return string
*/
function weighted_random(array $weights) {
$total = array_sum($weights);
$rand = mt_rand(1, $total);
foreach ($weights as $key => $weight) {
$rand -= $weight;
if ($rand <= 0) return $key;
}
}
// 使用範例
$event = weighted_random(['A' => 20, 'B' => 30, 'C' => 50]);
echo "觸發事件:$event";
?>