Другая версия, с некоторыми преимуществами ниже.
$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). Должна помогать с производительностью на очень больших массивах (еще не проверено!). Устраняет уведомления.
b) Основная логика проста в понимании, не затрагивая руководства. (Graviton, Chris J).
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);
Для обычной ситуации две многомерные матрицы не имеют точно таких же ключей. [merge/sum multi dimentional array php] (https://stackoverflow.com/q/44607229/6521116) –