php红包算法,根据指定金额,指定数量生成
/**
* @param $total 总金额
* @param $amount 数量
* @param float $min 最小金额
* @return array|false
*/
function getPackets($total,$amount,$min=0.01)
{
if ($amount * $min > $total) {
return false;
}
$money = 0;
for ($i = 1; $i < $amount; $i++) {
$safe_total = ($total - ($amount - $i) * $min) / ($amount - $i);//随机安全上限
if ($min < $safe_total) {
$money = mt_rand($min * 100, $safe_total * 100) / 100;
} else {
$money = $min;
}
$total = $total - $money;
$redPacket[] = $money;
// [
// 'money' => $money,
// 'balance' => $total,
// ];
}
//最后一个红包,
$redPacket[] = round($total,2);
// [
// 'money' => $total,
// 'balance' => 0,
// ];
return $redPacket;
}
调用:我是放在common里面的,所以直接写方法名即可
$oneCopy = getPackets(10,2);
注意:数组内的格式我需要这样的,所以处理成这样,具体可根据自己的需求处理数组
本文来自网络,不代表常识大全立场,如若转载,请注明出处:http://www.5150.top/cate/1.html