文档章节

php实现微信凭手气红包功能

王景华
 王景华
发布于 2015/11/19 14:55
字数 542
阅读 95
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

header("Content-type:text/html;charset=utf8");        // 都懂的设置页面编码
/**
 * 循环定位抽中的点
 * @param $totalMoney 红包的总金额
 * @param $arr 已经标记过的点的列表
 * @param $unit 每个红包的最小单位
 * @return int 本次运行后定位的点的位置
 */
function lottery($totalMoney,$arr,$unit){
    $num=rand(1,$totalMoney/$unit-1);
    if(in_array($num,$arr)){
        $num=lottery($totalMoney,$arr,$unit);
    }
    return $num;
}

/**
 * 原理说明 设想一根绳子有一个固定的长度(即本红包的总金额/红包的金额最小单位),在上面标记整数位的点
 * 进行N-1(抽奖人数-1)次的随机打点 如果点重复则再次打点 当这些点全部打出来后,组合上首位位置0点和 $totalMoney/$unit位
 * 展开这条绳子,在这些点的位置截断,每个绳子的长度(排序后,$data[$i+1]-$data[$i])就是每个人的中奖的金额!!! 
 * 仿微信红包功能
 * @param $totalPeople 红包的总个数
 * @param $totalMoney 红包的总金额
 * @param int $unit 红包的金额的最小单位
 * @return array|int 如果参数异常返回相应的错误码,反之,返回抽奖的结果
 */
function award($totalPeople,$totalMoney,$unit=1){
    if($totalMoney/$totalPeople<$unit){
        return -1;
    }
    if(!is_int($totalMoney/$unit)){
        return -3;
    }
    if(!is_int($totalPeople)){
        return -2;
    }
    $data[0]=0;
    for($i=1;$i<$totalPeople;$i++){
        $num=lottery($totalMoney,$data,$unit);
        array_push($data,$num);
    }
    $data[$totalPeople]=$totalMoney/$unit;
    sort($data);
    $money=array();
    for($i=0;$i<$totalPeople;$i++){
        $money[$i]=($data[$i+1]-$data[$i])*$unit;
    }
    return $money;
}

使用方式

$rs=award(11,100,1);
echo '<pre>';
print_r($rs);

运行结果:

Array
(
    [0] => 4
    [1] => 25
    [2] => 16
    [3] => 1
    [4] => 22
    [5] => 8
    [6] => 16
    [7] => 1
    [8] => 2
    [9] => 3
    [10] => 2
)

存在问题:

当N(N>500)个人领取N*unit或者(N+1)*unit 红包的时候 容易出现递归调用次数过多的问题! 这个问题一直没有找到合适的解决方法!还请各位大侠,能给个思路

© 著作权归作者所有

王景华
粉丝 2
博文 7
码字总数 4297
作品 0
松江
高级程序员
私信 提问
加载中

评论(2)

王景华
王景华 博主

引用来自“pei”的评论

你好 ,可以加你的QQ吗 ?我的项目想添加这个功能。 能一起合作吗?
756381193或者wjh756381193@qq.com
pei
pei
你好 ,可以加你的QQ吗 ?我的项目想添加这个功能。 能一起合作吗?
安卓或IOS平台辅助程序

【项目背景】 微信辅助程序:主要功能体现于,在同一部设备,多开微信号的情况下,微信号A先领取拼手气红包,微信号B通过微信号A领取红包的数据,自动计算拼手气红包最后一个红包的金额数值,...

颓废de微笑
2017/05/10
24
0
微信群自动抢红包,红包数据统计

【业务需求】 用途:微信群自动抢红包,统计红包抢完后的结果,昵称+金额 在微信群发红包和抢红包的流程如下: 1、我发一个拼手气的红包,总额1元,一共3个; 2、我自己点开红包抢得一个,金...

初昕工作室
2017/03/17
60
0
微信群自动抢红包,红包数据统计

【业务需求】 用途:微信群自动抢红包,统计红包抢完后的结果,昵称+金额 在微信群发红包和抢红包的流程如下: 1、我发一个拼手气的红包,总额1元,一共3个; 2、我自己点开红包抢得一个,金...

初昕工作室
2017/03/20
149
0
秒杀 计数器 直播--php 实现数据库连接池、直播平台

yaf项目快速开发(兼容php7): yaf project rapid development, integration of the db action class support chain operation, support separate read and write, pdo, mysqli, mongo, up......

qieangel
2015/09/07
15.4K
4
微信红包的随机算法是怎样实现的?

摘自知乎 ,答案来自:https://www.zhihu.com/question/22625187/answer/85530416 答案来自:https://www.zhihu.com/question/22625187/answer/85530416 有人问过微信的人,大致是这样: 先上...

北极之北
2016/02/23
2.5K
3

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
6
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
5
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
14
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
9
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部