You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现同color键下val、val1、val2字段求和的最优方案

PHP数组按color分组并求和val/val1/val2的最优方法

给定如下PHP数组,需要按color字段分组,将每组内的val、val1、val2字段分别求和:

$originalArray = [
    ['color' => 'red', 'val' => 4, 'val1' => 4, 'val2' => 4],
    ['color' => 'green', 'val' => 3, 'val1' => 3, 'val2' => 3],
    ['color' => 'blue', 'val' => 1, 'val1' => 3, 'val2' => 3],
    ['color' => 'green', 'val' => 6, 'val1' => 3, 'val2' => 3],
    ['color' => 'blue', 'val' => 2, 'val1' => 3, 'val2' => 3],
];

期望得到的结果:

Array
(
    [0] => Array
        (
            [color] => red
            [val] => 4
            [val1] => 4
            [val2] => 4
        )

    [1] => Array
        (
            [color] => green
            [val] => 9
            [val1] => 6
            [val2] => 6
        )

    [2] => Array
        (
            [color] => blue
            [val] => 3
            [val1] => 6
            [val2] => 6
        )
)

最优解法:一次遍历累加

最高效且易维护的方式是通过单次遍历原数组,以color为键维护结果数组,逐步累加对应字段值,时间复杂度仅为O(n)(n为原数组元素数量):

<?php
$originalArray = [
    ['color' => 'red', 'val' => 4, 'val1' => 4, 'val2' => 4],
    ['color' => 'green', 'val' => 3, 'val1' => 3, 'val2' => 3],
    ['color' => 'blue', 'val' => 1, 'val1' => 3, 'val2' => 3],
    ['color' => 'green', 'val' => 6, 'val1' => 3, 'val2' => 3],
    ['color' => 'blue', 'val' => 2, 'val1' => 3, 'val2' => 3],
];

$result = [];
foreach ($originalArray as $item) {
    $color = $item['color'];
    // 初始化当前color的统计项(首次出现时)
    if (!isset($result[$color])) {
        $result[$color] = [
            'color' => $color,
            'val' => 0,
            'val1' => 0,
            'val2' => 0,
        ];
    }
    // 累加对应字段值
    $result[$color]['val'] += $item['val'];
    $result[$color]['val1'] += $item['val1'];
    $result[$color]['val2'] += $item['val2'];
}

// 若需要将关联数组转为索引数组,去掉color作为键名
$result = array_values($result);

print_r($result);
?>

解法说明

  • 遍历过程中,用color作为结果数组的键,避免重复分组判断;
  • 首次遇到某个color时,初始化其统计结构;
  • 后续遇到同color的元素,直接累加对应字段值;
  • 最后通过array_values()将结果转为索引数组,匹配期望输出格式。

内容的提问来源于stack exchange,提问作者arunfrancis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:21:57