实现发红包02

1. 生成红包代码
class Red
{
    /**
     * @var int 红包总金额
     */
    private $total;

    /**
     * @var int 红包个数
     */
    private $num;

    /**
     * @var float 红包最小额
     */
    private $min;

    public function __construct($total = 0, $num = 0, $min = 0.01)
    {
        $this->total = $total;
        $this->num = $num;
        $this->min = $min;
    }

    /**
     * 生成红包
     * @return array
     */
    private function createRandRedPacket()
    {
		$list = array_fill(0, $this->num, $this->min);
        $this->total -= $this->min * $this->num;
        while ($this->total > 0) {
            $index = rand(0, $this->num - 1);
            $seek = rand($this->min * 100, round($this->total / $this->num, 4) * 100) / 100;
            $list[$index] += round(min($seek, $this->total), 2);
            $this->total -= $seek;
        }
        shuffle($list);
        return $list;
    }

    /**
     * 获取红包列表
     * @return array
     */
    public function getRed()
    {
        return $this->createRandRedPacket();
    }
}
2. 调用红包代码
$red = new Red(10, 10);
$list = $red->getRed();
print_r($list);exit;
3. 生成红包效果
Array
(
    [0] => 0.72
    [1] => 1.09
    [2] => 0.88
    [3] => 1.47
    [4] => 0.82
    [5] => 0.59
    [6] => 1.14
    [7] => 0.91
    [8] => 0.53
    [9] => 1.85
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员buddha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值