/** * 随机生成红包,先生成最小红包金额,再随机抽取哪个人中奖随机金额,直到所有金额分配完成 * @param int $allMoney 红包总金额 * @param int $peopleNum 红包个数 * @param int $min 最小红包金额 * @param int $max 最大红包金额 * @return array|bool / / function makePaper($allMoney = 100, $peopleNum = 20, $min = 3, $max = 10) { // 判断红包参数是否正确 if ($min * $peopleNum > $allMoney || $max * $peopleNum < $allMoney) { return false; } // 分配最小红包金额 $resultArray = array_fill(0, $peopleNum, $min); if ($min * $peopleNum == $allMoney) { return $resultArray; } $lastMoney = ($allMoney - $min * $peopleNum); $diffMoney = ($max - $min); while ($lastMoney > 0) { $randIndex = rand(0, $peopleNum - 1); if ($lastMoney > $diffMoney) { $randMoney = rand(1, $diffMoney); } elseif($lastMoney <= $diffMoney && $lastMoney > 1) { $randMoney = rand(1, $lastMoney); } elseif ($lastMoney <= 1) { $randMoney = $lastMoney; } if (($resultArray[$randIndex] + $randMoney) <= $max) { $resultArray[$randIndex] += $randMoney; $lastMoney -= $randMoney; } } return $resultArray; }

$result = makePaper(); var_dump($result); var_dump(array_sum($result));

for ($i = 0; $i < 20; $i++) { $rand = rand(1, 9); $rand = bcdiv($rand,10, 1); var_dump($rand); } */