PHP 大转盘抽奖思路_按权重抽奖
应该不难理解,比如概率数组['50','100','300']
他们一共是 '450' 份,'50' 在它们当中占'50'份
将这个数组循环,抽取一个 1-450 的随机数,如果在 50的范围内,那么就选中了50
如果没有选中50,那么就把 '50' 剔除出去,看数组 ['100','300'],再接着上面的方法去找
1 // 按权重抽奖 2 function get_rand($proArr) 3 { 4 $result = ''; 5 6 // 概率数组的总概率精度 7 $proSum = array_sum($proArr); 8 9 // 概率数组循环 10 foreach ($proArr as $key => $proCur) { 11 $randNum = mt_rand(1, $proSum); // 返回随机整数 12 if ($randNum <= $proCur) { 13 $result = $key; 14 break; 15 } else { 16 $proSum -= $proCur; 17 } 18 } 19 unset($proArr); 20 return $result; 21 } 22 23 $arr = [ 24 // 奖项id => 奖项权重 25 '1' => 50, 26 '2' => 100, 27 '3' => 300 28 ]; 29 30 $randId = get_rand($arr); // 返回,即为随机抽取的奖品ID