微信红包算法
/**生成红包的函数*/
function getrandmoney($totalmoney, $totalpeople=2, $minimoney=1){
$randremainmoney = $totalmoney - $totalpeople * $minimoney;//剩余需要随机的钱数
return _getrandmoney($randremainmoney, $totalpeople, $minimoney);
}
/**红包生成的逻辑代码*/
function _getrandmoney($totalmoney, $totalpeople, $minimoney){
$returnmessage = array('status'=>1, 'data'=>null);
if($totalmoney > 0){
$returnmessage['data'] = _randmoney($totalmoney, $totalpeople, $minimoney);
}elseif($totalmoney == 0){
$returnmessage['data'] = array_fill(0, $totalpeople, 1);
}else{
$returnmessage['status'] = -1;
$returnmessage['data'] = '参数传递有误,生成红包失败';
}
return $returnmessage;
}
/*参数无误,开始生成对应的红包金额*/
function _randmoney($totalmoney, $totalpeople, $minimoney){
$data = array_fill(0, $totalpeople, $minimoney);
if($totalpeople > 1){
foreach($data as $k => $v){
if($k == $totalpeople -1){
$data[$k] = $totalmoney + $v;
break;
}else {
if($totalmoney == 0) break;
$randmoney = rand(0, $totalmoney);
$totalmoney -= $randmoney;
$data[$k] = $randmoney + $v;
}
}
}
return $data;
}