最近有点懒,不怎么更新,平时事情比较多,加之周末要去锻炼打球赛所以才拖了那么久。闲话少说,上干货!!

首先这个程序已经不是什么新鲜的东西了,早在微信出抢红包功能的时候就有了,不过让我想写这篇文章的原因是昨天产品出了个需求,大概是要实现分享商品的链接进行拼单这么一个功能,前提条件已经设定好,设计了几个变量参数,一个是商品的总价(这里可以引申为红包总额),一个是分享的人数(引申为抢红包的总人数),最后的条件是每个人的拼单金额大小(抢到的红包金额大小)是随机的,但是总额要小于等于商品总价(红包总额)。通过以上的分析,那么就可以基本确定这是一个典型的抢红包程序。

在写程序之前,我想分享一点经验和心得,以后的文章都会有相应的编程小技巧分享。切记一点:不要急于求成,写程序忌讳一步到位!先实现一个小demo,然后再慢慢增加你的各种条件和循环,做项目也是一样,都是从每个细小的模块慢慢拼凑成大模块最后才拼成一个完整的项目。

先拆分需求,比如这里面需要用到随机数,那就先写个生成0.01到10.00区间的随机浮点数的程序。以下是代码。$min = 0.01;$max = 10.00;$random = rand($min,$max);echo $random ;

由于一条结果很难呈现效果,那么再加个循环$min = 0.01;$max = 10.00;for ($i=0;$i<10;$i++){    $random = mt_rand($min,$max);    echo "第 $i 个随机数为:";    echo $random ;    echo "
";//输出html换行标签

}

结果如下图

随机数.png

由于mt_rand()的返回值是整型,不是我们最终想要的结果,所以得另辟蹊径,在需求涉及到金额这一块的时候都要格外小心谨慎。$min = 0.01;$max = 10.00;for ($i=0;$i<10;$i++){    $random = $min + mt_rand() / mt_getrandmax() * ($max - $min);    echo "第 $i 个随机数为:";    echo $random ;    echo "
";//输出html换行标签

}

这里用到一个函数mt_getrandmax(),关于这个函数是这样的

系统一般会有最大能产生的随机数值LIMIT_RAND_MAX,比如2^31-1,而mt_getrandmax()返回的就是系统默认的这个值。使用情境应该是这样的:

1、使用mt_getrandmax()函数获取系统能产生的最大随机数值LIMIT_RAND_MAX

2、根据LIMIT_RAND_MAX来判定自己所需的随机数是否在这个范围

3、使用mt_rand()产生随机数

总的来说,mt_getrandmax()仅仅是用来做范围衡量作用。

结果如下

随机数1.png

这回接近多了,剩下的就是取小数点后2位。很简单,就是先乘上100取整,最后用php中的bc函数进行相除,取后两位,就拿到我们想要的结果。$min = 0.01;$max = 10.00;for ($i=0;$i<10;$i++){    $random = $min + mt_rand() / mt_getrandmax() * ($max - $min);    $rward = bcdiv(floor($random*100),100,2);    echo "第 $i 个随机数为:";    echo $rward ;    echo "
";//输出html换行标签

}

结果如下

随机浮点数.png

接下来是核心部分,抢红包的机制,首先每个人抢到的红包金额总和不能大于红包的总额,并且每个人的红包金额大小是随机的。那么可以根据设定抢红包的人数来写一个for循环。 这里可以先把产生随机数封装成一个函数。//取随机浮点数function random_float($min = 0.01, $max = 10.00) {    return $min + mt_rand() / mt_getrandmax() * ($max - $min);

}

$total_price = 20.00;//红包总额$overage = $total_price;//红包余额$num = 5;//设置抢红包的人数$reward = array($num);//每个人获得的红包(数组)for ($i=1;$i<=$num;$i++){

$random = random_float(0.01,$overage);

$reward[$i] = bcdiv(floor($random*100),100,2);

$overage = bcsub($overage,$reward[$i],2);    echo "第 $i 个人抢到的红包金额:";print_r($reward[$i]);echo "剩余红包总额为: $overage";    echo "
";//输出html换行标签}

结果如下

抢红包.png

那么到这里抢红包的功能基本上实现了,但是还少了几样东西,我想大家都发现了,为什么第一个人抢到的红包金额那么大,而其他的人金额普遍很低,又或者5个人其中一个抢到的红包数远远大于其他人的红包金额的总和,是因为我们在生成随机数的时候没有做限制,导致区间很大,说到这里就不得不说一个叫二倍均值法的东西,简单来说就是把每次产生随机数的右区间也就是

num(得到的值为平均值),然后再乘上2。做完这件事还要加一个条件才能算完成,最后一个人抢到的红包金额就是倒数第二轮剩余的红包总额。

//取随机浮点数function random_float($min = 0.01, $max = 10.00) {    return $min + mt_rand() / mt_getrandmax() * ($max - $min);

}

$total_price = 20.00;//红包总额$overage = $total_price;//红包余额$num = 5;//设置抢红包的人数$reward = array($num);//每个人获得的红包(数组)for ($i=1;$i<=$num;$i++){    if ($i==$num){

$reward[$i] = $overage;

$overage = 0;

}else{

$random = random_float(0.01,$overage/$num*2);

$reward[$i] = bcdiv(floor($random*100),100,2);

$overage = bcsub($overage,$reward[$i],2);

}    echo "第 $i 个人抢到的红包金额:";print_r($reward[$i]);echo "剩余红包总额为: $overage";    echo "
";//输出html换行标签}

输出结果

抢红包2.png

这样总算是成功了,那么一个产品的需求也就基本完成,这是最典型的抢红包程序了,可以根据产品的具体需要进行改造,变出更多花样。所以编程就是一个解决某个实际问题的过程,这也是从代码到功能实现的过程,希望对你有帮助!如有不正确的地方欢迎私信我!欢迎评论提出更多优化的地方!谢谢!

作者:周瑜君

链接:https://www.jianshu.com/p/8cac49e4c685

php 领红包程序,用PHP实现的抢红包小程序相关推荐

  1. 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的...

    最近公司在开发一个小程序红包系统,客户抢到红包需要提现.也就是通过小程序来给用户发红包. 小程序如何来发红包呢?于是我想到两个方法. 之前公众号开发一直用了的.一个是红包接口,一个是企业支付接口.一开 ...

  2. 微信小程序红包开发 小程序发红包 开发过程中遇到的坑 微信小程序红包接口的

    本文转载自: https://www.cnblogs.com/xinweiyun/p/7667595.html 作者:xinweiyun 转载请注明该声明. 最近公司在开发一个小程序红包系统,客户抢到 ...

  3. 小程序沉浸式_企业开发小程序:客户裂变式增长

    最近几年,各行各业中都有不少企业.商家获客难窘境.因此,很多企业.商家想知道:"怎么做,才能获取到大量流量?"小编给大家推荐一种方式:开发一个微信小程序,然后利用小程序来获取大量流 ...

  4. 婚纱摄影小程序能带来订单吗?小程序如何做营销?

    结婚是人生中的一件大事,大多数人都会走进婚姻,开始婚姻生活. 婚姻生活的第一步是领证结婚,拍婚纱照.在现在这个年代,很少有人结婚不拍婚纱照的.除了婚纱照还有婚庆摄影,这都是结婚必不可少的. 很多朋友结 ...

  5. 思考并实现以下程序功能:实现一个抢红包的程序 java

    抢红包的程序 java 思考并实现以下程序功能:实现一个抢红包的程序. 可参考模拟微信抢红包的过程:假如当前红包是x元,参与抢红包的有y人,按时间先后顺序保证y人正好抢完x元红包,其中每人抢的红包数值 ...

  6. 【小程序】766- 一文看懂小程序分享到朋友圈

    点击上方 关注我们 作者简介 张所勇 转转平台运营中心前端负责人,在前端领域有深入研究,包括:sketch一键切图.前端数据模型化,小程序基础能力建设等多个方面,10年工作经验中,做了2年工程师,5年 ...

  7. 小程序流量主怎么赚钱?小程序流量主怎么变现?

    众所周知,微信在2019年就已经突破11亿的用户量.现在是流量时代. 2018年7月10号,微信小程序广告组建全量开放,包括小游戏类目.也就是说,个人/企业今后可以直接在小程序后台自助申请开通广告位, ...

  8. 免费微信小程序,发一发打造微信小程序Saas营销服务移动工具箱

    微信是这个时代的伟大产物:小程序是微信的伟大产物:"发一发"承接伟大的产物,为广大用户提供免费的服务. 我们不知道下个时代会有什么形象级的产品诞生.但是,我们能抓住的就是眼前的所见 ...

  9. 现场抽奖小程序_小程序直播怎么引爆现场,小程序直播中 4大互动促转玩法

    小程序直播影响一场直播转化效果有4个重要因素,一看直播现场互动氛围如何,观众观看时长.参与互动意愿是否强烈:二看直播间活动是否有吸引力,能否激发用户购买欲望促进裂变转化.小编结合众多直播实战品牌案例, ...

最新文章

  1. ggbiplot-最好看的PCA作图:样品PCA散点+分组椭圆+主成分丰度和相关
  2. Python库cx_orcal 在64位win7上的安装记录
  3. SpringBoot学习(一)
  4. AI之父图灵登上50英镑钞票,荣耀比肩牛顿达尔文;吴恩达:将激励更多人
  5. Spring AOP编程-传统AOP开发切点表达式写法介绍
  6. 怎么实现阵列装配_第九篇:磁盘阵列和群晖SHR
  7. 新手教程——在Linux Mint 16中找到保存的WiFi密码
  8. Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyExce
  9. Linux 文件类型
  10. powerquery加载pdf_老板让我汇总PDF文件,我不会,同事用Excel两分钟就搞定
  11. 小项目,吃货联盟,java初级小项目,源代码
  12. Compass被墙后如何安装安装
  13. Android图片剪裁库:uCrop
  14. 阿帕奇服务器查看本地网页,如何在Apache Web服务器上查看当前连接?
  15. JDK源码阅读之Long
  16. Socket通讯--数据结构WSADATA
  17. kubeadm工作原理-kubeadm init原理分析-kubeadm join原理分析
  18. Jetson Xavier NX——重新刷系统
  19. 树莓派raspberryPI-4b 官方镜像raspios-bullseye-arm64 系統下编译构建ros2 rolling环境(附下载完整镜像资料)
  20. 2022年 最新Java面试题汇总,看完这些面试足够了

热门文章

  1. QNAP 威联通 NAS的个人使用经验 篇二:QTS系统各功能讲解
  2. STM32开发笔记108:将STM32CubeIDE设置为中文
  3. 天天果园成为Zespri 佳沛奇异果直接经销商
  4. 利用Bootstrap制作汉堡按钮(header部分)
  5. OceanBase数据库 OBCA考试认证通过感言
  6. Windows10关于拨号上网热点分享的操作
  7. STM32F103C8T6实现流水灯
  8. Debian设置合上笔记本盖子不休眠
  9. RGB 色值与十六进制色值互转
  10. Kubernetes(k8s)从入门到精通