Một phiên bản khác, với một số lợi ích bên dưới.
$sum = ArrayHelper::copyKeys($arr[0]);
foreach ($arr as $item) {
ArrayHelper::addArrays($sum, $item);
}
class ArrayHelper {
public function addArrays(Array &$to, Array $from) {
foreach ($from as $key=>$value) {
$to[$key] += $value;
}
}
public function copyKeys(Array $from, $init=0) {
return array_fill_keys(array_keys($from), $init);
}
}
Tôi muốn kết hợp câu trả lời hay nhất của Gumbo, Graviton và Chris J với các mục tiêu sau để tôi có thể sử dụng câu trả lời này trong ứng dụng của mình:
a) Khởi tạo các khóa mảng 'tổng' bên ngoài vòng lặp (Gumbo). Sẽ giúp tăng hiệu suất trên các mảng rất lớn (chưa được thử nghiệm!). Loại bỏ thông báo.
b) Logic chính dễ hiểu mà không cần hướng dẫn sử dụng. (Graviton, Chris J).
c) Giải bài toán tổng quát hơn về việc cộng các giá trị của hai mảng bất kỳ có cùng khóa và làm cho nó ít phụ thuộc vào cấu trúc mảng con hơn.
Không giống như giải pháp của Gumbo, bạn có thể sử dụng lại điều này trong trường hợp các giá trị không nằm trong mảng con. Hãy tưởng tượng trong ví dụ bên dưới $arr1
, $arr2
nó không được mã hóa cứng, nhưng đang được trả về do kết quả của việc gọi một hàm bên trong một vòng lặp.
$arr1 = array(
'gozhi' => 2,
'uzorong' => 1,
'ngangla' => 4,
'langthel' => 5
);
$arr2 = array(
'gozhi' => 5,
'uzorong' => 0,
'ngangla' => 3,
'langthel' => 2
);
$sum = ArrayHelper::copyKeys($arr1);
ArrayHelper::addArrays($sum, $arr1);
ArrayHelper::addArrays($sum, $arr2);