微信红包随机生成算法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
cache_lite试用
Feb 14 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
CodeIgniter常用知识点小结
May 26 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 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
CI(CodeIgniter)框架介绍
2014/06/09 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python操作日期和时间的方法
2014/03/11 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
简单的Python人脸识别系统
2020/07/14 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
为什么需要版本控制
2016/10/28 面试题
土木工程专业自荐信
2013/10/04 职场文书
志愿者服务感言
2014/02/27 职场文书
人事科岗位职责范本
2014/03/02 职场文书
总经理助理的职责
2014/03/14 职场文书
高中生逃课检讨书
2014/10/10 职场文书
房屋买卖协议样本
2014/11/16 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
保研专家推荐信范文
2015/03/25 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
LeetCode189轮转数组python示例
2022/08/05 Python