php 抽奖活动_php 积分抽奖活动(大转盘)
以下是项目代码(公众号,使用积分进行抽奖活动),只可做参考:
public function Sncode()
{
$tid = I('request.tid', 0, 'intval'); // 大转盘id,
$wid = I('request.wid', 0, 'intval'); // 应用id,可去掉
$token = $this->getOpenId(); // 获取微信用户的token
// 定义数据库
$big_wheel = D('Big_wheel'); // 大转盘设置表
$big_wheel_log = M('big_wheel_log'); // 抽奖记录表
$big_code = M('big_wheel_code'); // 已抽中奖品记录表
// 查询抽奖活动数据
$where = " `id` = " . $tid;
$list = $big_wheel->relation(true)->where($where)->find();
// 查询积分,若积分不足则无法参与抽奖
$score = $this->duser['score'];
if ($score < $list['score_num']) {
echo json_encode(array('error' => 'score'));
exit;
}
//已抽奖总次数
$where_log = "`big_wheel_id`=" . $tid . " and `w_id`=" . $list['w_id'] . " and `code`='" . $token . "'";
$count = $big_wheel_log->where($where_log)->count();
//减去额外获得的抽奖机会 - 分享(此操作暂时隐藏)
$map_share['wid'] = array('eq', $wid);
$map_share['token'] = array('eq', $token);
$map_share['big_wheel_id'] = array('eq', $tid);
$count_share = M('big_wheel_share')->where($map_share)->count();
$count = $count - $count_share;
//当日限制次数
if ($list['most_num_times'] > 0) {
$where_log .= " and (addtime BETWEEN " . strtotime(date('Y-m-d 00:00:00')) . " and " . strtotime(date('Y-m-d 23:59:59')) . ")";
$count_today = $big_wheel_log->where($where_log)->count();
$count_today = $count_today - $count_share;// 当日抽奖次数减去额外获得的抽奖次数
}
//判断抽奖次数
if ($count_today >= $list['most_num_times'] && $list['most_num_times'] > 0) {
echo json_encode(array('error' => 'invalid_today', 'nums' => $list['most_num_times']));
exit;
}
// 扣除积分
M('app_dishop_duser')->where(array('id' => $this->duser['id']))->setDec('score', $list['score_num']);
//插入抽奖记录表
$data['big_wheel_id'] = $tid;
$data['w_id'] = $list['w_id'];
$data['code'] = $token;
$data['date'] = date('Y-m-d', time());
$data['addtime'] = time();
$big_wheel_log->add($data);
/*
* 奖项数组
* 是一个二维数组,记录了所有本次抽奖的奖项信息,
* 其中id表示中奖等级,prize表示奖品,v表示中奖概率。
* 注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,
* 数组中v的总和(基数),基数越大越能体现概率的准确性。
* 本例中v的总和为100,那么中奖概率就是1%,
* 如果v的总和是10000,那中奖概率就是万分之一了。
*
*/
$prize_arr = array(
'0' => array('id' => 1, 'prize' => '1', 'v' => $list['c_probability_one']),
'1' => array('id' => 2, 'prize' => '谢谢参与', 'v' => $list['no_probability']),
'2' => array('id' => 3, 'prize' => '2', 'v' => $list['c_probability_two']),
'3' => array('id' => 4, 'prize' => '3', 'v' => $list['c_probability_three']),
);
foreach ($prize_arr as $key => $val) {
$arr[$val['id']] = $val['v'];
}
$rid = $this->get_rand($arr); //根据概率获取奖项id
$res['yes'] = $prize_arr[$rid - 1]['prize']; //中奖项
unset($prize_arr[$rid - 1]); //将中奖项从数组中剔除,剩下未中奖项
shuffle($prize_arr); //打乱数组顺序
for ($i = 0; $i < count($prize_arr); $i++) {
$pr[] = $prize_arr[$i]['prize'];
}
// 若抽中奖品,则存入库中,并返回提示
if ($res['yes'] == '1' || $res['yes'] == '2' || $res['yes'] == '3') {
//这个是保存到数据库表示你这个人抽中奖品
if ($res['yes'] == '1') {
// 查询这是第几次抽中此奖品,若抽中次数大于奖品数,则此次抽中的奖品作废
$code_count = $big_code->where(array('prizetype' => 1, 'big_wheel_id' => $tid))->count();
if ($code_count >= $list['c_num_one']) {
$data = array('prizetype' => null, 'success' => true);
echo json_encode($data);
exit;
}
$code['category'] = $list['c_name_one'];
} elseif ($res['yes'] == '2') {
// 查询这是第几次抽中此奖品,若抽中次数大于奖品数,则此次抽中的奖品作废
$code_count = $big_code->where(array('prizetype' => 2, 'big_wheel_id' => $tid))->count();
if ($code_count >= $list['c_num_two']) {
$data = array('prizetype' => null, 'success' => true);
echo json_encode($data);
exit;
}
$code['category'] = $list['c_name_two'];
} elseif ($res['yes'] == '3') {
// 查询这是第几次抽中此奖品,若抽中次数大于奖品数,则此次抽中的奖品作废
$code_count = $big_code->where(array('prizetype' => 3, 'big_wheel_id' => $tid))->count();
if ($code_count >= $list['c_num_three']) {
$data = array('prizetype' => null, 'success' => true);
echo json_encode($data);
exit;
}
$code['category'] = $list['c_name_three'];
}
$code['sn_id'] = 'sn' . time() . mt_rand(10000, 99999);
$code['w_id'] = $list['w_id'];
$code['big_wheel_id'] = $tid;
$code['prizetype'] = $res['yes'];
$code['code'] = $token;
$code['winners_time'] = time();
$code['state'] = 1;
$big_code->add($code);
$data = array('sn' => $code['sn_id'], 'prizetype' => $res['yes'], 'success' => true);
echo json_encode($data);
exit;
} else {
$data = array('prizetype' => null, 'success' => true);
echo json_encode($data);
exit;
}
}
// 抽奖概率计算
public 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;
}
php 抽奖活动_php 积分抽奖活动(大转盘)相关推荐
- 微信公众号大转盘抽奖活动链接怎么添加
很多微信公众号都会有抽奖活动,想要给自己的公众号添加大转盘抽奖活动的链接,希望可以帮助大家在微信公众号中举办起抽奖活动,活跃起自己的粉丝,该怎么添加呢?下面我们就来看看详细的教程. 微信公众号大转盘抽 ...
- qq开放平台之站内应用-php抽奖大转盘,jQuery实现大转盘抽奖活动仿QQ音乐代码分享...
jQuery实现大转盘抽奖活动仿QQ音乐抽奖特效源码是一款基于jQuery,点击大转盘开始抽奖可抽到绿钻的仿qq音乐抽奖转盘的代码. 运行效果图:--------------------------- ...
- 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)
双蛋节(圣诞+元旦)刚刚过去,前几天项目上线的砸金蛋活动也圆满结束. 现在在许多网站上都会有抽奖的活动,抽奖的算法也是多种多样,这里介绍一下如何根据每种奖品的权重来抽奖,适用于多种抽奖形式. 奖品 ...
- vue加js实现大转盘抽奖活动
1.写大转盘的页面,这里是我的整个页面的代码 }, created() { this.ais = localStorage.getItem('ais') }, computed: { classOpt ...
- ecmall flash大转盘积分抽奖功能
网络抽奖活动已经成为商家赢利的最得力利器,无论是大型综合网点,如百度,如新浪,如腾讯,如搜狐等,像这类大型公司都利用着网络抽奖活动来为自己记得更多的Money,而其它网站利用网络抽奖活动的也是比比皆是 ...
- php余额宝收益源码,2021亲测PHP投资理财分红源码 带积分商城+余额宝+大转盘+教程...
2021亲测PHP投资理财分红源码 带积分商城+余额宝+大转盘+独家教程 这套金融理财投资源码功能还是蛮丰富的,源码的思路和其它的没什么区别,都是后台添加项目,前台用户进行投资,然后到了固定时间点获取 ...
- PHP 实现积分兑换和大转盘抽奖功能,防超卖
目录 前情提要 如何不发生超卖现象? 代码如何实现 Redis 锁的实现(悲观锁) 结论 前情提要 前段时间帮客户做了一个线上会议网站,网站实际运营 2 个多月,正常参会用户注册量大概有1万多. 网站 ...
- php 打乱数组顺序_PHP实现大转盘抽奖算法
php中文网最新课程 每日17点准时技术干货分享 本文通过具体的实例向大家介绍了PHP语言实现大转盘抽奖算法,希望对大家学习PHP抽奖有所帮助. 流程: 1.拼装奖项数组: 2.计算概率: 3.返回中 ...
- php转盘中奖率,PHP大转盘中奖概率算法实例_PHP
本文实例讲述了PHP大转盘中奖概率算法的实现方法,分享给大家供大家参考.具体如下: 大转盘是最近很多线上网动中一个比较有意思的东西了,下面我们就来看看这个大转盘中奖概率算法与例子,希望对各位有所帮助. ...
- 小程序的大转盘活动怎么做?
日常生活中最常见的抽奖活动莫过于大转盘抽奖了吧,无论线上线下.大转盘抽奖活动具有多样性.并可开展基于粘性维护的活动:跨界营销.会员积分.互动抽奖.红包.优惠等线上线下活动,并能通过连续扫码.会员积分. ...
最新文章
- linux yum 离线安装rpm包
- Python——随机法(蒙特卡罗方法)计算圆周率
- oracle raise_application_error,RAISE_ APPLICATION_ ERROR--之异常处理
- 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结
- RestClient使用
- shell 逐行读取文件
- CE修改器基础操作教程
- 佳能Canon PIXMA MP630 一体机驱动
- Excel VBS编程 命令详细介绍 详解
- 微信小程序云数据库操作
- Gerber文件介绍
- Mac苹果电脑开不了机怎么办,该怎么修复
- QQ是怎么实现通讯的
- 关于“源代码未编译“问题的回复
- es java 删除索引_使用java中的elasticSearch 2.3.3按索引名称和类型删除索引
- Unity3D 声音格式及导入
- VS2010如何编辑32bits图标
- 基于php114检察院案件综合业务管理系统
- 单基因gsea_2020年这个单基因套路仍然能发3分SCI
- AWS Devops所涉及的必须了解运用求职的重要服务
热门文章
- Parameterize Method(令函数携带参数)
- ubuntu系统上进行usb相机端口绑定
- linux内核网络协议栈--netif_receive_skb()函数(八)
- 【转帖】楚狂人的 DriverNetworks开发网络驱动教材(0-7课)
- 百度大脑通用物体识别使用攻略
- 苹果新一代iPad发布,库克表示后PC时代已经来临
- 使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the poo
- 《思考力---引爆无限潜能》书摘(一)
- python从入门到实践16章答案
- 如何利用python实现qq聊天_Python之路 - Socket实现QQ聊天