首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP 多維陣列合併:依 id、b 欄位分組並累加 num 值

     編輯:程式設計綜合問答

輸入資料

$arr1 = [
    ["id" => "2", "b" => 0, "num" => 4],
    ["id" => "1", "b" => 0, "num" => 4]
];

$arr2 = [
    ["id" => "3", "b" => 0, "num" => 4],
    ["id" => "2", "b" => 0, "num" => 4]
];

需求

合併兩陣列,**id 和 b 皆相同視為同一筆**,num 累加;結果重新索引 0,1,2...。

解決方案:以「id|b」為鍵建立關聯陣列

function mergeArrays(array $arr1, array $arr2): array {
    $merged = [];

    // 遍歷兩個陣列
    foreach (array_merge($arr1, $arr2) as $item) {
        $key = $item['id'] . '|' . $item['b']; // 組合鍵
        if (!isset($merged[$key])) {
            $merged[$key] = $item; // 首次出現,直接存入
        } else {
            $merged[$key]['num'] += $item['num']; // 累加 num
        }
    }

    // 重新索引並回傳
    return array_values($merged);
}

$result = mergeArrays($arr1, $arr2);
print_r($result);
/* 輸出:
Array
(
    [0] => Array ( [id] => 2 [b] => 0 [num] => 8 )  // 累加
    [1] => Array ( [id] => 1 [b] => 0 [num] => 4 )
    [2] => Array ( [id] => 3 [b] => 0 [num] => 4 )
)
*/

進階:支援任意欄位分組

function mergeByKeys(array $arrays, array $groupKeys, string $sumKey): array {
    $map = [];
    foreach (array_merge(...$arrays) as $item) {
        $keyParts = [];
        foreach ($groupKeys as $k) $keyParts[] = $item[$k];
        $key = implode('|', $keyParts);

        if (!isset($map[$key])) {
            $map[$key] = $item;
        } else {
            $map[$key][$sumKey] = ($map[$key][$sumKey] ?? 0) + ($item[$sumKey] ?? 0);
        }
    }
    return array_values($map);
}

// 使用
$result = mergeByKeys([$arr1, $arr2], ['id', 'b'], 'num');

效能說明

  • 時間複雜度 **O(N)**,N 為總元素數,單次遍歷完成分組累加。
  • 記憶體 **O(K)**,K 為唯一分組數。
  • 避免雙重迴圈 (O(N²)) 或多次排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved