微信红包随机生成算法php版


Posted in PHP onJuly 21, 2016

想了想,自己写写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程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 PHP
php简单截取字符串代码示例
Oct 19 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 PHP
php集成动态口令认证
Jul 21 #PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 #PHP
微信随机生成红包金额算法php版
Jul 21 #PHP
PHP简单读取PDF页数的实现方法
Jul 21 #PHP
基于PHP微信红包的算法探讨
Jul 21 #PHP
php中preg_replace_callback函数简单用法示例
Jul 21 #PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 #PHP
You might like
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
python编程线性回归代码示例
2017/12/07 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
tensorflow的计算图总结
2020/01/12 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
电脑教师的教学自我评价
2013/11/26 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
学习委员竞选稿
2015/11/20 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python