Eine andere Version mit einigen Vorteilen unten.
$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);
}
}
Ich wollte das Beste aus der Antwort von Gumbo, Graviton und Chris J mit den folgenden Zielen kombinieren, damit ich dies in meiner App verwenden kann:
a) Initialisieren Sie die 'sum'-Array-Schlüssel außerhalb der Schleife (Gumbo). Sollte bei der Leistung auf sehr großen Arrays helfen (noch nicht getestet!). Beseitigt Benachrichtigungen.
b) Die Hauptlogik ist leicht zu verstehen, ohne die Handbücher zu lesen. (Graviton, Chris J).
c) Lösen Sie das allgemeinere Problem des Hinzufügens der Werte von zwei beliebigen Arrays mit denselben Schlüsseln und machen Sie es weniger abhängig von der Subarray-Struktur.
Im Gegensatz zur Lösung von Gumbo können Sie dies in Fällen wiederverwenden, in denen sich die Werte nicht in Unterarrays befinden. Stellen Sie sich in dem folgenden Beispiel , daß $arr1
und $arr2
sind nicht fest codiert, sondern werden als das Ergebnis der Aufruf einer Funktion in einer Schleife zurückgeführt .
$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);