以下是项目代码(公众号,使用积分进行抽奖活动),只可做参考:

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 积分抽奖活动(大转盘)相关推荐

  1. 微信公众号大转盘抽奖活动链接怎么添加

    很多微信公众号都会有抽奖活动,想要给自己的公众号添加大转盘抽奖活动的链接,希望可以帮助大家在微信公众号中举办起抽奖活动,活跃起自己的粉丝,该怎么添加呢?下面我们就来看看详细的教程. 微信公众号大转盘抽 ...

  2. qq开放平台之站内应用-php抽奖大转盘,jQuery实现大转盘抽奖活动仿QQ音乐代码分享...

    jQuery实现大转盘抽奖活动仿QQ音乐抽奖特效源码是一款基于jQuery,点击大转盘开始抽奖可抽到绿钻的仿qq音乐抽奖转盘的代码. 运行效果图:--------------------------- ...

  3. 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)

    双蛋节(圣诞+元旦)刚刚过去,前几天项目上线的砸金蛋活动也圆满结束.   现在在许多网站上都会有抽奖的活动,抽奖的算法也是多种多样,这里介绍一下如何根据每种奖品的权重来抽奖,适用于多种抽奖形式. 奖品 ...

  4. vue加js实现大转盘抽奖活动

    1.写大转盘的页面,这里是我的整个页面的代码 }, created() { this.ais = localStorage.getItem('ais') }, computed: { classOpt ...

  5. ecmall flash大转盘积分抽奖功能

    网络抽奖活动已经成为商家赢利的最得力利器,无论是大型综合网点,如百度,如新浪,如腾讯,如搜狐等,像这类大型公司都利用着网络抽奖活动来为自己记得更多的Money,而其它网站利用网络抽奖活动的也是比比皆是 ...

  6. php余额宝收益源码,2021亲测PHP投资理财分红源码 带积分商城+余额宝+大转盘+教程...

    2021亲测PHP投资理财分红源码 带积分商城+余额宝+大转盘+独家教程 这套金融理财投资源码功能还是蛮丰富的,源码的思路和其它的没什么区别,都是后台添加项目,前台用户进行投资,然后到了固定时间点获取 ...

  7. PHP 实现积分兑换和大转盘抽奖功能,防超卖

    目录 前情提要 如何不发生超卖现象? 代码如何实现 Redis 锁的实现(悲观锁) 结论 前情提要 前段时间帮客户做了一个线上会议网站,网站实际运营 2 个多月,正常参会用户注册量大概有1万多. 网站 ...

  8. php 打乱数组顺序_PHP实现大转盘抽奖算法

    php中文网最新课程 每日17点准时技术干货分享 本文通过具体的实例向大家介绍了PHP语言实现大转盘抽奖算法,希望对大家学习PHP抽奖有所帮助. 流程: 1.拼装奖项数组: 2.计算概率: 3.返回中 ...

  9. php转盘中奖率,PHP大转盘中奖概率算法实例_PHP

    本文实例讲述了PHP大转盘中奖概率算法的实现方法,分享给大家供大家参考.具体如下: 大转盘是最近很多线上网动中一个比较有意思的东西了,下面我们就来看看这个大转盘中奖概率算法与例子,希望对各位有所帮助. ...

  10. 小程序的大转盘活动怎么做?

    日常生活中最常见的抽奖活动莫过于大转盘抽奖了吧,无论线上线下.大转盘抽奖活动具有多样性.并可开展基于粘性维护的活动:跨界营销.会员积分.互动抽奖.红包.优惠等线上线下活动,并能通过连续扫码.会员积分. ...

最新文章

  1. linux yum 离线安装rpm包
  2. Python——随机法(蒙特卡罗方法)计算圆周率
  3. oracle raise_application_error,RAISE_ APPLICATION_ ERROR--之异常处理
  4. 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结
  5. RestClient使用
  6. shell 逐行读取文件
  7. CE修改器基础操作教程
  8. 佳能Canon PIXMA MP630 一体机驱动
  9. Excel VBS编程 命令详细介绍 详解
  10. 微信小程序云数据库操作
  11. Gerber文件介绍
  12. Mac苹果电脑开不了机怎么办,该怎么修复
  13. QQ是怎么实现通讯的
  14. 关于“源代码未编译“问题的回复
  15. es java 删除索引_使用java中的elasticSearch 2.3.3按索引名称和类型删除索引
  16. Unity3D 声音格式及导入
  17. VS2010如何编辑32bits图标
  18. 基于php114检察院案件综合业务管理系统
  19. 单基因gsea_2020年这个单基因套路仍然能发3分SCI
  20. AWS Devops所涉及的必须了解运用求职的重要服务

热门文章

  1. Parameterize Method(令函数携带参数)
  2. ubuntu系统上进行usb相机端口绑定
  3. linux内核网络协议栈--netif_receive_skb()函数(八)
  4. 【转帖】楚狂人的 DriverNetworks开发网络驱动教材(0-7课)
  5. 百度大脑通用物体识别使用攻略
  6. 苹果新一代iPad发布,库克表示后PC时代已经来临
  7. 使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the poo
  8. 《思考力---引爆无限潜能》书摘(一)
  9. python从入门到实践16章答案
  10. 如何利用python实现qq聊天_Python之路 - Socket实现QQ聊天