微信红包随机生成算法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 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
PHP实现图片简单上传
Oct 09 PHP
笑谈配置,使用Smarty技术
Jan 04 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
小谈php正则提取图片地址
Mar 27 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 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与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
JS正则表达式验证数字代码
2014/01/28 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
Element Input组件分析小结
2018/10/11 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python计算一个序列的平均值的方法
2015/07/11 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
高一家长会邀请函
2014/01/12 职场文书
总结表彰大会主持词
2014/03/26 职场文书
成绩单家长评语大全
2014/04/16 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
给老婆的道歉信
2015/01/20 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
Python基本的内置数据类型及使用方法
2022/04/13 Python