Другая версия, с некоторыми преимуществами ниже.
$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, Graviton и Chris J со следующими целями, чтобы я мог использовать это в своем приложении:
a) Инициализируйте ключи массива «сумма» вне цикла (Gumbo). Должно помочь с производительностью на очень больших массивах (еще не проверено!). Устраняет уведомления.
б) Основная логика легко понять, не обращаясь к руководствам. (Гравитон, Крис Дж.).
c) Решить более общую проблему сложения значений любых двух массивов с одинаковыми ключами и сделать его менее зависимым от структуры подмассива.
В отличие от решения 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);