版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/php_lzr/article/details/82901548
不废话 直接上代码 大家可以 借鉴一下 只是接口 没有 页面抽奖页面效果 抽奖概率 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); // }