当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » PHP  » Web编程
shooke

生成指定个数的随机红包

shooke 发布于 2015年12月10日 14时, 3评/1644阅
分享到: 
收藏 +0
2
指定红包金额,最小红包金额和红包个数就可以自动生成
标签: CorePHP

代码片段(1) [全屏查看所有代码]

1. [代码][PHP]代码     跳至 [1] [全屏预览]

<?php
$total=20;//红包总金额   
$num=10;// 分成10个红包,支持10人随机领取   
$min=0.01;//每个人最少能收到0.01元   
 $redpack = new redpack($total,$num,$min);
 $jieguo = $redpack->getPack();
 foreach($jieguo as $key=>$val){
	 $n = $key+1;
	 echo '第'.$n.'个红包:'.$val['money'].' 元,余额:'.$val['balance'].' 元<br>';   
 }

class redpack{
	//总金额
	private $total=0;
	//红包数量
	private $num=0;
	//最小红包金额
	private $min=0.01;
	
	public function __construct($total,$num,$min)
	{
		$this->total = $total;
		$this->num = $num;
		$this->min = $min;
	}
	//红包结果
	public function getPack()
	{
		$total = $this->total;
		$num = $this->num;
		$min = $this->min;
		for ($i=1;$i<$num;$i++)   
		{   
			$safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限   
			$money=mt_rand($min*100,$safe_total*100)/100;   
			$total=$total-$money;  
			//红包数据
			$readPack[]= [
				'money'=>$money,
				'balance'=>$total,
			];
		}
		//最后一个红包,不用随机		
		$readPack[] = [
			'money'=>$money,
			'balance'=>0,
		];
		//返回结果
		return $readPack;
	}
	
}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(3)

  • 1楼:沉淀的陈 发表于 2015-12-11 10:31 回复此评论
    代码有问题!
  • 2楼:水果蟹 发表于 2015-12-21 09:58 回复此评论

    引用来自“沉淀的陈”的评论

    代码有问题!
    楼主估计写错了吧,最后一个红包的应该余额就是$total而不是$money,改下就好了
  • 3楼:阿nd 发表于 2015-12-25 12:06 回复此评论
    如果需要控制每个人领取最多金额需要怎么修改呢?
开源从代码分享开始 分享代码
shooke的其它代码 全部(23)...