如何按相同code对PHP数组的count值求和?求正确代码
解决多维数组按code合并求和的问题
你的代码没法得到正确结果,主要是两个核心问题:
- 每次循环都把
$total重置为0,完全没起到累加的作用 - 每次直接覆盖
$new_data[$v['code']]的值,导致最后每个code只保留了最后一条的count,而不是总和
这里给你一个逻辑清晰的正确实现:
$data = array( array( 'code' => '02', 'count' => 8 ), array( 'code' => '03', 'count' => 1 ), array( 'code' => '03', 'count' => 1 ), array( 'code' => '03', 'count' => 7 ), array( 'code' => '11', 'count' => 1 ), array( 'code' => '11', 'count' => 5 ), array( 'code' => '17', 'count' => 4 ), array( 'code' => '17', 'count' => 2 ), array( 'code' => '17', 'count' => 8 ) ); $new_data = []; foreach($data as $item){ // 检查当前code是否已经在结果数组中存在 if(isset($new_data[$item['code']])){ // 存在就累加count到ttl $new_data[$item['code']]['ttl'] += $item['count']; } else { // 不存在就初始化这个code的总和为当前count $new_data[$item['code']] = ['ttl' => $item['count']]; } } echo '<pre>'; print_r($new_data); echo '</pre>';
补充说明:
- 我把原数组里的
code改成了字符串类型(比如'02'而不是02),因为PHP里02会被解析成八进制数(对应十进制的2),如果你的业务需要保留前导零的code,字符串类型能避免键名被意外转换的问题 - 这段代码会输出每个code对应的count总和,比如code为03的总和是1+1+7=9,code为17的总和是4+2+8=14,完全符合你的需求
内容的提问来源于stack exchange,提问作者p3ac3
相关产品推荐
相关产品推荐

