php 抽獎介面demo
阿新 • • 發佈:2018-12-12
不廢話 直接上程式碼 大家可以 借鑑一下 只是介面 沒有 頁面抽獎頁面效果 抽獎概率 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); // }