php实现的微信红包算法分析(非官方)


Posted in PHP onSeptember 25, 2015

本文实例讲述了php实现的微信红包算法。分享给大家供大家参考。具体如下:

最近一直在微信群里体验红包功能,红包类型有两种:

1. 普通红包

2. 拼手气红包

普通红包就不用多解析了,大锅饭原理,平分。

拼手气红包讲的是手气(运气),有人可以抢到很多,有人抢的少得可怜,当然也不是先抢就一定多,说到底了就是随机。

php实现的微信红包算法分析(非官方)

想了想,自己写写看,能不能实现类似的功能(不敢说是算法)。

// $bonus_total 红包总金额
// $bonus_count 红包个数
// $bonus_type 红包类型 1=拼手气红包 0=普通红包
function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){
  $bonus_items  = array(); // 将要瓜分的结果
  $bonus_balance = $bonus_total; // 每次分完之后的余额
  $bonus_avg   = number_format($bonus_total/$bonus_count, 2); // 平均每个红包多少钱
  $i       = 0;
  while($i<$bonus_count){
    if($i<$bonus_count-1){
      $rand      = $bonus_type?(rand(1, $bonus_balance*100-1)/100):$bonus_avg; // 根据红包类型计算当前红包的金额
      $bonus_items[] = $rand;
      $bonus_balance -= $rand;
    }else{
      $bonus_items[] = $bonus_balance; // 最后一个红包直接承包最后所有的金额,保证发出的总金额正确
    }
    $i++;
  }
  return $bonus_items;
}

好吧,我们现在来体验一下

// 发3个拼手气红包,总金额是100元
$bonus_items  = randBonus(100, 3, 1);
// 查看生成的红包
var_dump($bonus_items);
// 校验总金额是不是正确,看看微信有没有坑我们的钱
var_dump(array_sum($bonus_items));

另一个使用数组实现的版本,原理差不多:

function sendRandBonus($total=0, $count=3, $type=1){
  if($type==1){
    $input     = range(0.01, $total, 0.01);
    if($count>1){
      $rand_keys = (array) array_rand($input, $count-1);
      $last    = 0;
      foreach($rand_keys as $i=>$key){
        $current  = $input[$key]-$last;
        $items[]  = $current;
        $last    = $input[$key];
      }
    }
    $items[]    = $total-array_sum($items);
  }else{
    $avg      = number_format($total/$count, 2);
    $i       = 0;
    while($i<$count){
      $items[]  = $i<$count-1?$avg:($total-array_sum($items));
      $i++;
    }
  }
  return $items;
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
数字转英文
Dec 06 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
PHP链表操作简单示例
Oct 15 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
PHP简单实现断点续传下载的方法
Sep 25 #PHP
分享3个php获取日历的函数
Sep 25 #PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 #PHP
常见PHP数据库解决方案分析介绍
Sep 24 #PHP
又十个超级有用的PHP代码片段
Sep 24 #PHP
PHP易混淆知识整理笔记
Sep 24 #PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 #PHP
You might like
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python进程间通信用法实例
2015/06/04 Python
python中import学习备忘笔记
2017/01/24 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Django用户身份验证完成示例代码
2020/04/03 Python
python中Django文件上传方法详解
2020/08/05 Python
解决Python安装cryptography报错问题
2020/09/03 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
你的自行车健身专家:FaFit24
2016/11/16 全球购物
采购部部门职责
2013/12/15 职场文书
小学音乐教学反思
2014/02/05 职场文书
策划创业计划书
2014/02/06 职场文书
还款承诺书范文
2014/05/20 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
诚信高考倡议书
2019/06/24 职场文书