首先上圖


首先就是頁面初始數(shù)據(jù)渲染:



頁面大體就是這些,接口獲取獎(jiǎng)項(xiàng)列表,然后訪問后端計(jì)算概率接口獲取到獎(jiǎng)項(xiàng)位置,然后返回給小程序端,小程序端有了這個(gè)位置不管轉(zhuǎn)動(dòng)多少圈最終中獎(jiǎng)位置都是這里。
接下來后端代碼:
//根據(jù)概率獲取獎(jiǎng)項(xiàng)位置
public function get_draw(){
? $url="draw/prize_list";//獎(jiǎng)項(xiàng)列表api接口
? ? $data['type_name'] = '九宮格抽獎(jiǎng)';
? $data['shop_id'] = input('shop_id');
? $data['order_id'] = input('order_id');
? ? $res= getData($url,$data);
? ? if ($res['code']==1) {
? ? $prize_arr=$res['data']['draw_list'];
? ? }else{
? ? $prize_arr='';
? ? }
? ? ? foreach ($prize_arr as $k=>$v) {
? ? $arr[$v['id']] = $v['probability'];//這里是設(shè)定的概率值 值越高 中獎(jiǎng)幾率越大(0-100)
}
? ? ? $prize_id = $this->getRand($arr); //根據(jù)概率獲取獎(jiǎng)項(xiàng)id
? ? ? foreach($prize_arr as $k=>$v){ //獲取前端獎(jiǎng)項(xiàng)位置
? ? ? ? ? if($v['id'] == $prize_id){
? ? ? ? ? $prize_site = $k;
? ? ? ? ? break;
? ? ? ? ? }
? ? ? }
? ? ? $res = $prize_arr[$prize_id - 1]; //中獎(jiǎng)項(xiàng)
? ? ? $arr = array_map('array_shift',$prize_arr);
? ? ? $key = array_search($prize_id,$arr);
? ? ? $data=[
? ? ? ? 'prize_id'=>$res['id'],
? ? ? ? 'id'=>$key,
? ? ? ? 'type'=>$res['type'],
? ? ? ? 'image_url'=>$res['image_url'],
? ? ? ? ];
? ? ? ? return json($data);
? ? }
? ? /**
? ? * 根據(jù)概率獲取獎(jiǎng)項(xiàng)
? ? * @param unknown $proArr
? ? * @return Ambigous <string, unknown>
? ? */
? ? function getRand($proArr)
? ? {
? ? ? ? $result = '';
? ? ? ? //概率數(shù)組的總概率精度
? ? ? ? $proSum = array_sum($proArr);
? ? ? ? //概率數(shù)組循環(huán)
? ? ? ? foreach ($proArr as $key => $proCur) {
? ? ? ? ? ? $randNum = mt_rand(1, $proSum);
? ? ? ? ? ? if ($randNum <= $proCur) {
? ? ? ? ? ? ? ? $result = $key;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? $proSum -= $proCur;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? unset ($proArr);
? ? ? ? return $result;
? ? }
這里計(jì)算出中獎(jiǎng)項(xiàng)返回給小程序端就ok了。