const MIN_TOTAL = 2; //最小红包金额
const MAX_TOTAL = 200; //最大红包金额
const MAX_NUM = 50; //最多红包个数
const MIN_EVERY_RED_ENVELOPE = 0.1; //每个红包最小金额
const ENVELOPE_DUE_HOUR = 24; //红包有效期
/**
* 生成红包信息(新算法)
* @param int $coin 红包金额
* @param int $num 红包个数
* @return total, num
*/
public static function generateEnvelope($coin,$num){
$get = array();
$list = array();
$avg = floor(round($coin/$num,2) * 10)/10;
for($i=1; $i<$num; $i++){
$rand = rand(0, ($avg-self::MIN_EVERY_RED_ENVELOPE)*10)/10; //随机取值
if($rand >= $avg) $rand = 0;
$list[] = $avg - $rand;
$get[] = $rand;
$coin -= $avg;
}
$rand = rand(0, ($coin-self::MIN_EVERY_RED_ENVELOPE)*10)/10; //随机取值
if($rand >= $coin) $rand = 0;
$list[] = $coin - $rand;
$get[] = $rand;
//随机分配增加
foreach($get as $val)
{
$randKey = rand(0, count($get) - 1);
$list[$randKey] += $val;
}
return $list;
}