最新文章:
首页 后端
抽奖算法,基于thinkphp
发布时间:2016年02月16日 阅读数:3482
这是一个多个商品一起抽奖的抽奖代码。抽奖算法逻辑:比如奖品的中奖概率是百分比 商品A是1% 商品B是2% 那么就创建一个100位的数组键值0是A 1,2是B 抽的时候随机数,中了0 就是0商品 1或者2 就是B商品。
//抽奖
public function startDraw(){
//获取用户信息和抽奖分类的信息 这里抽奖分类就是 需要多少金币抽奖,下面就扣除多少金币
$postData = I('post.','','trim');
if(empty($_POST['userid'])){
echo json_encode($this->errorCode[1]);
return false;
}
if(empty($_POST['typeid'])){
echo json_encode($this->errorCode[1]);
return false;
}
//每日一次免费抽奖 记录prize_nums_record 并且判断
if($_POST['isfree']){
$last_res = M('prize_nums_record')->where('userid='.$_POST['userid'].' and typeid='.$_POST['typeid'])->order('id desc')->find();
if(date('Ymd', $last_res['time']) == date('Ymd')) {
echo json_encode($this->errorCode[1004]);
return false;
}
$postData['time'] = time();
M('prize_nums_record')->add($postData);
}
$prize_model = new PrizeModel();
$member_model = new MemberModel();
//获取price_type 的信息
$prize_type = $prize_model->getPrizeTypeByPricetypeid($_POST['typeid']);
$cointype = $prize_type['cointype'];
$coin = $prize_type['coin'];
//获取用户信息
$member_info = $member_model->getUserByid($_POST['userid']);
//判断用户币数 如果不足 就退出
if($cointype){
if($coin > $member_info['accountgold']){
echo json_encode($this->errorCode[1000]);
return false;
}else{
$r = $member_model->reduceAccountgold($member_info['userid'],$coin);
if(!$r){
echo json_encode($this->errorCode[503]);
return false;
}
}
}else{
if($coin > $member_info['accountsilver']){
echo json_encode($this->errorCode[1001]);
return false;
}else{
$r = $member_model->reduceAccountsilver($member_info['userid'],$coin);
if(!$r){
echo json_encode($this->errorCode[503]);
return false;
}
}
}
//输出将要抽奖的所有商品 用于下面forach 中奖
$res = $prize_model->getPrizeListByTypeid($_POST['typeid']);
//一起计算
$arr = range(0,99);
foreach ($arr as $ak => $av) {
$arr[$ak] = 0;
}
$i = 0;
foreach ($res as $key => $value) {
$prize_nums = $value['probability'];
if($prize_nums>1){
for($j=0;$j<$prize_nums;$j++){
$arr[$i] = $value['prizeid'];
$i++;
}
}else{
$arr[$i] = $value['prizeid'];
$i++;
}
}
//print_r($arr);
$this->errorCode[0]['info'] = '很遗憾,您未中奖,谢谢参与!';
$rand_key = array_rand($arr);
$prizeid = $arr[$rand_key];
$prize_info = $prize_model->getPrizeByPrizeid($prizeid);
if($prize_info){
$data['typeid'] = $prize_info['typeid'];
$data['prizeid'] = $prizeid;
$data['userid'] = $_POST['userid'];
$data['time'] = time();
$prize_record_model = new Prize_recordModel();
$reduce_res = $prize_model->reduceNmus($prizeid);
if($reduce_res){
$result = $prize_record_model->add($data);
$this->errorCode[0]['info'] = '恭喜您中奖啦!恭喜您获得'.$prize_info['title'].'。1个工作日内,工作人员会与您联系!';
$this->advicesSave(1,$_POST['userid'],'恭喜您中奖啦!恭喜您获得'.$prize_info['title']);
echo json_encode($this->errorCode[0]);
return;
}else{
echo json_encode($this->errorCode[0]);
return false;
}
}else{
echo json_encode($this->errorCode[0]);
}
}
本文作者:初心
文章标题: 抽奖算法,基于thinkphp
本文地址:http://www.5wcx.com/back/10.html
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
本文地址:http://www.5wcx.com/back/10.html
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
相关文章
您可以选择一种方式赞助本站
支付宝转账赞助
