php红包退回通知,php红包

标签:

/**   转http://www.oschina.net/code/snippet_1392428_54532     谢谢 php_fangting

* @param $total [你要发的红包总额]

* @param int $num [发几个]

* @return array[生成红包金额]

*/

function getRedGift($total, $num = 10)

{

$min = 0.01;

$wamp = array();

$returnData = array();

for ($i = 1; $i < $num; ++$i) {

$safe_total = ($total - ($num - $i) * $min) / ($num - $i); //红包金额的最大值

if ($safe_total < 0) break;

$money = @mt_rand($min * 100, $safe_total * 100) / 100;//随机产生一个红包金额

$total = $total - $money;//剩余红包总额

$wamp[$i] = round($money, 2);//保留两位有效数字

}

$wamp[$i] = round($total, 2);

$returnData[‘MoneySum‘] = $wamp;

$returnData[‘newTotal‘] = array_sum($wamp);

return $returnData;

}

//测试

$data = getRedGift(100, 10);

print_r($data);

//result:

/*

Array

(

[1] => 8.7

[2] => 10.09

[3] => 6.23

[4] => 6.87

[5] => 0.47

[6] => 3.12

[7] => 7.52

[8] => 12.21

[9] => 20.53

[10] => 24.26

)*/

public function rands($total=0, $num=3, $bonus_type=1)

{

$m = $total;

// $total=10;//红包总额

//$num=8;// 分成8个红包,支持8人随机领取

$min=0.01;//每个人最少能收到0.01元

$res = array();

for ($i=1;$i

{

$safe_total = ($total-($num-$i)*$min)/($num-$i);//随机安全上限

$money = mt_rand($min*100,$safe_total*100)/100;

$total = bcsub($total, $money, 2);

$res[] = $money;

}

$res[]=  $m - array_sum($res);

return $res;

}

public function hongbaoAction()

{

// 发3个拼手气红包,总金额是100元

for ($i = 0 ;$i< 10000; $i++)

{

$bonus_items  = $this->rands(100, rand(3, 60), 1);

// 查看生成的红包

$arr = array();

$arr[‘typeid‘] = $bonus_items[0];

$arr[‘nums‘]= $bonus_items[1];

$arr[‘change_nums‘] = $bonus_items[2];

$arr[‘dateline‘] = array_sum($bonus_items);// 校验总金额是不是正确,看看微信有没有坑我们的钱

$this->mainModel->test($arr);

unset($arr, $bonus_items);

}

}

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值