Une autre version, avec quelques avantages ci-dessous.
$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);
}
}
Je voulais combiner le meilleur des réponses de Gumbo, Graviton et Chris J avec les objectifs suivants afin de pouvoir l'utiliser dans mon application:
a) Initialisez les clés du tableau 'sum' en dehors de la boucle (Gumbo). Cela devrait améliorer les performances sur de très grands tableaux (pas encore testés!). Élimine les avis.
b) La logique principale est facile à comprendre sans toucher aux manuels. (Graviton, Chris J).
c) Résoudre le problème plus général de l'addition des valeurs de deux tableaux quelconques avec les mêmes clés et le rendre moins dépendant de la structure du sous-tableau.
Contrairement à la solution de Gumbo, vous pouvez la réutiliser dans les cas où les valeurs ne sont pas dans des sous-tableaux. Imaginez dans l'exemple ci - dessous que $arr1
et $arr2
ne sont pas codés en dur, mais sont retournés à la suite d'appeler une fonction dans une boucle.
$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);