Інша версія, яка має деякі переваги нижче.
$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);
}
}
Я хотів поєднати найкращі відповіді Гумбо, Гравітона та Кріса Дж із такими цілями, щоб я міг використовувати це у своєму додатку:
а) Ініціалізуйте ключі масиву «сума» поза циклом (Gumbo). Має допомогти з продуктивністю на дуже великих масивах (ще не перевірено!). Усуває повідомлення.
б) Основну логіку легко зрозуміти, не потрапляючи в посібники. (Гравітон, Кріс Дж.).
в) Вирішіть загальну задачу додавання значень будь-яких двох масивів одними і тими ж ключами та зробіть його менш залежним від структури підмасиву.
На відміну від рішення Gumbo, ви можете повторно використовувати це в тих випадках, коли значення не знаходяться в підмасивах. Уявіть , в наведеному нижче прикладі , що $arr1
і $arr2
не твердо, але повертається як результат виклику функції всередині циклу.
$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);