1. 程式人生 > >php 抽獎介面demo

php 抽獎介面demo

不廢話 直接上程式碼 大家可以 借鑑一下 只是介面 沒有 頁面抽獎頁面效果
抽獎概率
public static 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; 
}
抽獎邏輯
$today_time = strtotime(date('Y-m-d', time()));//當前時間0點
            $count_key = 'guoqing1_rand_count_'.$user_id;
            $todat_count_key = 'guoqing1_rand_count_'.$today_time;
            $rand_count = $redis->scount($count_key);//使用者當天的抽獎次數
            $todat_count = $redis->scount($todat_count_key);//當天所有的抽獎次數

            if($rand_count >= $number || $todat_count >= 300) error(23007);//抽獎次數已用完
            $redis->sset($count_key,$operate_time);//記錄使用者抽獎次數
            $redis->sset($todat_count_key,$operate_time);//記錄當天總抽獎次數
            //累計抽中1次後不能中獎
//            $chouzhong_count = $redis->lsize('guoqing1_user_result_'.$user_id);
//            $chouzhong_count = $chouzhong_count ? $chouzhong_count : 0;
            //判斷使用者是否抽中過獎品 抽中的話 就不能再抽 返回謝謝會惠顧
//            if($chouzhong_count < 1){
                //判斷實物獎品是否還有庫存  沒有的話 中獎記錄設為0
                $prize1 = $redis->get('guoqing1_rand_prize1'.$today_time);//查詢糖果音樂耳機已抽中數量 總量25個
                $prize1_v = ($prize1 && $prize1==25) ? 0 : 83.3 ;

                $prize2 = $redis->get('guoqing1_rand_prize2'.$today_time);//查詢摺疊雙肩揹包已抽中數量
                $prize2_v = ($prize2 && $prize2==18) ? 0 : 60 ;

                $prize3 = $redis->get('guoqing1_rand_prize3'.$today_time);//查詢雙層真空保溫杯已抽中數量
                $prize3_v = ($prize3 && $prize3==18) ? 0 : 60 ;

                $prize4 = $redis->get('guoqing1_rand_prize4'.$today_time);//查詢線控自拍杆已抽中數量
                $prize4_v = ($prize4 && $prize4==18) ? 0 : 60 ;

                $prize5 = $redis->get('guoqing1_rand_prize5'.$today_time);//查詢月色LED小夜燈已抽中數量
                $prize5_v = ($prize5 && $prize5==11) ? 0 : 36.7 ;

                $prize6 = $redis->get('guoqing1_rand_prize6'.$today_time);//查詢騰訊vip會員已抽中數量 總量10個 千分之一
                $prize6_v = ($prize6 && $prize6==210) ? 0 : 700 ;

                //獎池權重設定   中獎率/千分
                $prize_arr = array(
                    '0' => array('id'=>1,'prize'=>'糖果音樂耳機','v'=>$prize1_v),
                    '1' => array('id'=>2,'prize'=>'摺疊雙肩揹包','v'=>$prize2_v),
                    '2' => array('id'=>3,'prize'=>'雙層真空保溫杯','v'=>$prize3_v),
                    '3' => array('id'=>4,'prize'=>'線控自拍杆','v'=>$prize4_v),
                    '4' => array('id'=>5,'prize'=>'月色LED小夜燈','v'=>$prize5_v),
                    '5' => array('id'=>6,'prize'=>'騰訊vip會員','v'=>$prize6_v),
                );

                //抽獎
                foreach ($prize_arr as $key => $val) {
                    $arr[$val['id']] = $val['v'];
                    $arr1[$val['id']] = $val['id'];
                }

                $rid = jifenTool::get_rand($arr); //根據概率獲取獎項id
                unset($prize_arr[$rid-1]['v']);
                $result = $prize_arr[$rid-1];//中獎項

//                查詢使用者的中獎記錄
                $result1 = $redis->lget('guoqing1_user_result_'. $user_id,0,-1);
                if($result1){
                    $new_result = array();
                    foreach($result1 as $key => $val){
                        $val = json_decode($val,1);
                        $new_result[$key]['prize_id'] = $val['prize_id'];
                    }
//                    檢測使用者抽到的獎品 保證每次使用者抽中的產品不一樣
                    foreach ($new_result as $k=>$v){
                        foreach ($v as $val){
                            $new_res[] = $val;
                        }
                    }
                    if(in_array($rid,$new_res)){
                        if(count($new_res)>1){
                            unset($arr1[$new_res[0]],$arr1[$new_res[1]]);
                        }else{
                            unset($arr1[$new_res[0]]);
                        }
                        $rid = array_rand($arr1);
                    }
                }

//                //記錄中獎的獎品
                if($rid==1){
                    $redis->set('guoqing1_rand_prize1'.$today_time,$prize1!==false ? $prize1+1 : 1);//記錄中獎結果
//                    credit_userTool::score($user_id, 11, 20);//送學分
                }
                if($rid==2){
                    $redis->set('guoqing1_rand_prize2'.$today_time,$prize2!==false ? $prize2+1 : 1);
//                    credit_userTool::score($user_id, 11, 30);//送學分
                }
                if($rid==3){
                    $redis->set('guoqing1_rand_prize3'.$today_time,$prize3!==false ? $prize3+1 : 1);
//                    credit_userTool::score($user_id, 11, 50);//送學分
                }
                if($rid==4){
                    $redis->set('guoqing1_rand_prize4'.$today_time,$prize4!==false ? $prize4+1 : 1);
                }
                if($rid==5){
                    $redis->set('guoqing1_rand_prize5'.$today_time,$prize5!==false ? $prize5+1 : 1);
                }
                if($rid==6){
                    $redis->set('guoqing1_rand_prize6'.$today_time,$prize6!==false ? $prize6+1 : 1);
                }
                //記錄中獎結果redis
                $my_result = json_encode(array(
                    'user_id' => $user_id,
                    'prize_id' => $rid,
                    'prize' => $prize_arr[$rid - 1]['prize'],
                    'time' => time())
                );
                $redis->lpush('guoqing1_user_result_' . $user_id, $my_result);//中獎使用者中獎獎項

                //記錄中獎結果mysql
                $info['prize_id'] = $rid;
                $info['user_id'] = $user_id;
                $info['prize'] =  $prize_arr[$rid - 1]['prize'];
                $info['add_time'] = $operate_time;
                $rs = $this->mod('prize')->add($info);

//                *異常處理
                if(!$rs) error(303);
                //組裝資料
                foreach ($result as $v){
                    $result['id'] = $rid;
                    $result['prize'] = $prize_arr[$rid - 1]['prize'];
                    $result['rand_count'] = $rand_count+1;
                    $result['prize_id'] = $rs;
                }
                $this->data = $result;
                $this->count = $todat_count+1;

//            }else{
//                $this->data =  array('id'=>7,'prize'=>'謝謝參與','v'=>0);
//            }