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 les utiliser dans mon application :
a) Initialiser les clés du tableau 'sum' en dehors de la boucle (Gumbo). Cela devrait améliorer les performances sur les très grands tableaux (pas encore testé !). Élimine les avis.
b) La logique principale est facile à comprendre sans avoir à consulter les manuels. (Graviton, Chris J).
c) Résoudre le problème plus général de l'addition des valeurs de deux tableaux ayant les mêmes clés et le rendre moins dépendant de la structure des sous-réseaux.
Contrairement à la solution de Gumbo, vous pouvez réutiliser cette méthode dans les cas où les valeurs ne sont pas dans des sous-réseaux. Imaginez dans l'exemple ci-dessous que $arr1
y $arr2
ne sont pas codées en dur, mais sont renvoyées comme résultat de l'appel d'une fonction à l'intérieur d'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);
0 votes
Dans une situation courante, deux tableaux multidimensionnels n'ont pas exactement les mêmes clés. fusion/somme d'un tableau multidimensionnel php