//php機率抽獎算法 1、獲取總的機率數 2、隨機從1到總機率數 三、判斷獲取的隨機數是否在小於等於(就是你隨機的數是否在數組值得範圍中好比數組爲array(1,2,3,4,5,6)則隨機出了一個數爲3 3是存在array中 因此將鍵就賦給一個變量 ,若是隨機一個數爲 7了 那得減去這個範圍 一直到能在數組中尋找到 $sum=$sum-$val 像這樣(隨機數爲7 則7-1=6))數組中的值 function get_rand($arr) { $result=""; $sum=array_sum($arr); //獲取總機率書 foreach($arr as $key=>$val) { $rand=mt_rand(1,$sum); //var_dump($val['xx']); //rad =7; //7- if($rand<=$val)//獲取的值是否在val中有 { //隨機的數小於等於了值 $result=$key; break; }else{ $sum=$sum-$val; } } return $result; }
oreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v']; } $rid = getRand($arr); //根據機率獲取獎項id $res = $prize_arr[$rid-1]; //中獎項 $min = $res['min']; $max = $res['max']; if($res['id']==7){ //七等獎 $i = mt_rand(0,5); $result['angle'] = mt_rand($min[$i],$max[$i]); }else{ $result['angle'] = mt_rand($min,$max); //隨機生成一個角度 } $result['prize'] = $res['prize']; echo json_encode($result);
$prize_arr = array( '0' => array('id'=>1,'prize'=>'平板電腦','v'=>1), '1' => array('id'=>2,'prize'=>'數碼相機','v'=>3), '2' => array('id'=>3,'prize'=>'音箱設備','v'=>6), '3' => array('id'=>4,'prize'=>'4G優盤','v'=>20), '4' => array('id'=>5,'prize'=>'10Q幣','v'=>25), '5' => array('id'=>6,'prize'=>'下次沒準就能中哦','v'=>50), ); /* * 每次前端頁面的請求,PHP循環獎項設置數組, * 經過幾率計算函數get_rand獲取抽中的獎項id。 * 將中獎獎品保存在數組$res['yes']中, * 而剩下的未中獎的信息保存在$res['no']中, * 最後輸出json個數數據給前端頁面。 */ foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v']; //帶入數組 } $rid = get_rand($arr); //根據機率獲取獎項id $res['yes'] = $prize_arr[$rid-1]['prize']; //中獎項 unset($prize_arr[$rid-1]); //將中獎項從數組中剔除,剩下未中獎項 shuffle($prize_arr); //打亂數組順序 for($i=0;$i<count($prize_arr);$i++){ $pr[] = $prize_arr[$i]['prize']; } $res['no'] = $pr; print_r($res);