處理多維陣列時,常需針對相同鍵名的子陣列值進行加總。例如訂單數據中 price、pnum 等欄位存儲為索引陣列,需快速計算總價、總數量。
$ar = [
'uid' => 19,
'pid' => [91, 81],
'price' => [6, 14],
'pnum' => [1, 1],
];
<?php
$r = array_map(function($t) {
return is_array($t) ? array_sum($t) : $t;
}, $ar);
print_r($r);
/* 輸出:
Array
(
[uid] => 19
[pid] => 172
[price] => 20
[pnum] => 2
)
*/
優點:代碼簡潔、聲明式風格、自動保留非陣列值。
適用:PHP 5.3+,鍵名固定、結構均勻的數據。
<?php
$arr = [];
foreach ($ar as $k => $v) {
$arr[$k] = is_array($v) ? array_sum($v) : $v;
}
print_r($arr);
優點:邏輯直觀、易於調試、兼容舊版 PHP、便於加入額外業務邏輯(如類型檢查、日誌記錄)。
function deepArraySum($data) {
if (!is_array($data)) return $data;
return array_map('deepArraySum', $data);
}
// 配合 array_walk_recursive 實現任意深度求和
array_walk_recursive($ar, function(&$v) { $v = (int)$v; });
// 然後使用 array_map 或 foreach 進行聚合
foreach 略快於 array_map(避免閉包開銷)。foreach 可就地修改原陣列,節省內存。array_map 表達意圖清晰的簡單轉換。foreach。is_array() 守衛,避免 array_sum() 對標量報警告。