浏览文章
文章信息
PHP随机评论| 随机几个数的和是一个定值|PHP”随机数相加等于固定值“|rand int sum as a fix amount
760
性能更好的版本(推荐):
/** * @DESC # 获取随机 * * @AUTH 秋枫雁飞 * @EMAIL aiweline@qq.com * @DateTime: 2022/9/8 23:25 * 参数区: * * @param int $item_num * @param int $total * @param int $min * @param int $max * * @return array */ function getRatingItemValue(int $item_num = 5, int $total = 20, int $min = 0, int $max = 5): array { $items = []; $avg = intval(floor($total / $item_num)); for ($i = 0; $i < $item_num; $i++) { $items[] = random_int($min, $avg); } $last = $total - array_sum($items); foreach ($items as $item) { if ($item > $max) { return $this->getRatingItemValue($item_num, $total, $min, $max); } } if ($last > $max) { return $this->getRatingItemValue($item_num, $total, $min, $max); } $items[] = $last; return $items; }
怎么用PHP产生n个数,并让其和为定值
示例:
/** * @DESC # 获取随机评论 * * @AUTH 秋枫雁飞 * @EMAIL aiweline@qq.com * @DateTime: 2022/9/8 23:05 * 参数区: * * @param int $count [随机数个数] * @param int $sum [随机数总和] * @param int $mix [最小随机数] * @param int $max [最大随机数] * * @return array */ function getRand(int $count = 5, int $sum = 5, int $mix = 0, int $max = 5): array { ini_set('memory_limit', '1024M'); $i = 1; while ($i <= $count) { $tmp[] = mt_rand($mix, $max); $i++; } $k = $sum / array_sum($tmp); $res = []; foreach ($tmp as $v) { $res[] = (int)($v * $k); } $assoc = $sum - array_sum($res); $last = array_pop($res); $res[] = $last + $assoc; while (max($res) > $max) { $tmax = max($res); $key = array_search($tmax, $res); if ($key !== false) { $res[$key] = mt_rand($mix, $max); $k = array_search(min($res), $res); $res[$k] = $tmax - $res[$key] + min($res); } } return $res; }