PHP7.4下按状态数组分组多列数组并对每组对应数值求和实现问题
PHP7.4 按状态分组累加多数组对应值实现方案
实现逻辑如下:
- 以关联下标为基准遍历所有数组,用状态作为临时聚合数组的键,累加对应维度的数值
- 聚合完成后将临时数组拆分重组为你需要的目标结构
可用代码如下:
<?php $statuses = ['PROSPECT', 'BACKLOG', 'PROSPECT']; $of_tranxs = [2, 1, 2]; $revs = [3, 1, 3]; $mgps = [4, 1, 4]; // 临时聚合数组,key为状态值 $tempAgg = []; foreach ($statuses as $index => $status) { if (!isset($tempAgg[$status])) { $tempAgg[$status] = [ 'of_tranx' => 0, 'rev' => 0, 'mgp' => 0 ]; } // 累加对应下标的数值 $tempAgg[$status]['of_tranx'] += $of_tranxs[$index]; $tempAgg[$status]['rev'] += $revs[$index]; $tempAgg[$status]['mgp'] += $mgps[$index]; } // 转换为目标结构 $result = [ 'status' => array_keys($tempAgg), 'of_tranx' => array_column($tempAgg, 'of_tranx'), 'rev' => array_column($tempAgg, 'rev'), 'mgp' => array_column($tempAgg, 'mgp') ]; print_r($result);
运行上述代码输出的结果和你要求的结构完全一致。
你之前使用的array_zip_combine不是PHP原生提供的函数,且这类数组拼接方法本身无法实现分组累加的逻辑,直接遍历下标的方案逻辑更清晰,在PHP7.4版本中可正常运行,性能也更高。
内容的提问来源于stack exchange,提问作者user15293852
相关产品推荐
相关产品推荐

