微信红包随机生成算法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版
Oct 09 PHP
超级简单的发送邮件程序
Oct 09 PHP
谈谈PHP的输入输出流
Feb 14 PHP
一个PHP并发访问实例代码
Sep 06 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
PHP实现动态web服务器方法
Jul 29 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
php中的钩子理解及应用实例分析
Aug 30 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+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
Javascript this指针
2009/07/30 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
python3.3实现乘法表示例
2014/02/07 Python
python的类变量和成员变量用法实例教程
2014/08/25 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
python实现按关键字筛选日志文件
2019/12/24 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
大学生就业自荐信
2013/10/26 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
美容院营销方案
2014/03/05 职场文书
挂职学习心得体会
2014/09/09 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
会计求职信怎么写
2015/03/20 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js