Inna wersja, z kilkoma zaletami poniżej.
$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);
}
}
Chciałem połączyć najlepsze odpowiedzi Gumbo, Graviton i Chrisa J z następującymi celami, aby móc użyć tego w mojej aplikacji:
a) Zainicjuj klucze tablicy „sum” poza pętlą (Gumbo). Powinno pomóc w wydajności na bardzo dużych tablicach (jeszcze nie testowane!). Eliminuje powiadomienia.
b) Główna logika jest łatwa do zrozumienia bez sięgania po instrukcje. (Graviton, Chris J).
c) Rozwiąż bardziej ogólny problem polegający na dodaniu wartości dowolnych dwóch tablic z tymi samymi kluczami i uczynienie go mniej zależnym od struktury podtablicy.
W przeciwieństwie do rozwiązania Gumbo, możesz użyć tego ponownie w przypadkach, gdy wartości nie znajdują się w tablicach podrzędnych. Wyobraź sobie na przykład, że poniżej $arr1
i $arr2
nie są zakodowane, ale są zwracane w wyniku wywołania funkcji wewnątrz pętli.
$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);