$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...。
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');