標籤:return ret turn 函數 藍芽 說明 隨機數 華為手機 膝上型電腦
設定中獎的列表
- 欄位說明
id 獎品編號
prize 獎品名稱
v 中獎機率$prize_arr = array(array(‘id‘ => 1, ‘prize‘ => ‘膝上型電腦‘, ‘v‘ => 1),array(‘id‘ => 2, ‘prize‘ => ‘華為手機‘, ‘v‘ => 5),array(‘id‘ => 3, ‘prize‘ => ‘藍芽音箱‘, ‘v‘ => 10),array(‘id‘ => 4, ‘prize‘ => ‘1000積分‘, ‘v‘ => 12),array(‘id‘ => 5, ‘prize‘ => ‘30積分‘, ‘v‘ => 22),array(‘id‘ => 6, ‘prize‘ => ‘下次沒準就能中哦‘, ‘v‘ => 50),);
封裝中獎機率函數
function get_rand($proArr){ $result = ‘‘; //機率數組的總機率精度 $proSum = array_sum($proArr); //機率數組迴圈 foreach($proArr as $key => $proCur) { // 擷取隨機數 $randNum = mt_rand(1, $proSum); if($randNum <= $proCur) { $result = $key; break; } else { // 減掉當前中獎的機率 $proSum -= $proCur; } } unset ($proArr); return $result;}
擷取中獎獎品
// 把獎品id 設定為鍵名$prize_arr = array_combine(array_column($prize_arr, ‘id‘), $prize_arr);foreach($prize_arr as $key => $val){ $arr[$val[‘id‘]] = $val[‘v‘];}$rid = get_rand($arr); //根據機率擷取獎項id$res[‘yes‘] = $prize_arr[$rid][‘prize‘]; //中獎項unset($prize_arr[$rid]); //將中獎項從數組中剔除,剩下未中獎項shuffle($prize_arr); //打亂數組順序for($i = 0; $i < count($prize_arr); $i++){ $pr[] = $prize_arr[$i][‘prize‘];}$res[‘no‘] = $pr;echo json_encode($res);
分享一個PHP抽獎演算法