把总数amount拆分以标准差最小的标准,平均拆分成count个整数
public function tt_add(){ $res = $this->arr_avg(20,14); echo array_sum($res); echo '----' . count($res); dump($res); exit; } /*** * @param $amount '总数' * @param $count '需要拆分数据个数' * @return array|mixed '把总数amount拆分已标准差最小的标准,平均拆分成count个整数' */ public function arr_avg($amount, $count) { $avg_num = $amount / $count; $ceil_num = ceil($amount / $count); if ($avg_num == $ceil_num) { $avg_res = array_fill(0, $count, (int)$ceil_num); } else { if ($amount < $count) { $avg_res_1 = array_fill(0, $amount, (int)$ceil_num); // 这里只会填充1 $avg_res_2 = array_fill($amount - 1, $count - $amount, 0); $avg_res = dealed_array_merge($avg_res_1, $avg_res_2); } else { $floor_num = floor($amount / $count); $avg_res = array_fill(0, $count, (int)$floor_num); $left_num = $amount - array_sum($avg_res); if (1 <= $left_num) { $left_avg_res = $this->arr_avg($left_num, $count); foreach ($left_avg_res as $k => $v){ if ($v == 0){ unset($left_avg_res[$k]); } } unset($v); $left_avg_res = array_values($left_avg_res); $avg_res = $this->array_add($avg_res,$left_avg_res); } } } return $avg_res; } /*** * @param $a * @param $b * @return mixed '2个一维数组相加,键名相同相加,不同的均保留' */ public function array_add($a,$b) { //根据键名获取两个数组的交集 $arr = array_intersect_key($a, $b); //遍历第二个数组,如果键名不存在与第一个数组,将数组元素增加到第一个数组 foreach ($b as $key => $value) { if (!array_key_exists($key, $a)) { $a[$key] = $value; } } //计算键名相同的数组元素的和,并且替换原数组中相同键名所对应的元素值 foreach ($arr as $key => $value) { $a[$key] = $a[$key] + $b[$key]; } //返回相加后的数组 return $a; }
例:amount:20 count:14
20----8
<pre>array(8) {
[0] => int(3)
[1] => int(3)
[2] => int(3)
[3] => int(3)
[4] => int(2)
[5] => int(2)
[6] => int(2)
[7] => int(2)
}
</pre>
例:amount: 20, count : 20
20----20
<pre>array(20) {
[0] => int(1)
[1] => int(1)
[2] => int(1)
[3] => int(1)
[4] => int(1)
[5] => int(1)
[6] => int(1)
[7] => int(1)
[8] => int(1)
[9] => int(1)
[10] => int(1)
[11] => int(1)
[12] => int(1)
[13] => int(1)
[14] => int(1)
[15] => int(1)
[16] => int(1)
[17] => int(1)
[18] => int(1)
[19] => int(1)
}
</pre>
例: amount: 20, count: 22
20----22
<pre>array(22) {
[0] => int(1)
[1] => int(1)
[2] => int(1)
[3] => int(1)
[4] => int(1)
[5] => int(1)
[6] => int(1)
[7] => int(1)
[8] => int(1)
[9] => int(1)
[10] => int(1)
[11] => int(1)
[12] => int(1)
[13] => int(1)
[14] => int(1)
[15] => int(1)
[16] => int(1)
[17] => int(1)
[18] => int(1)
[19] => int(1)
[20] => int(0)
[21] => int(0)
}
</pre>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2018-10-10 redis 新开端口号
2018-10-10 php生成word
2018-10-10 tp5.1 入口文件即报错
2017-10-10 wx.request 获取不到post传递的值