Un'altra versione, con alcuni vantaggi di seguito.
$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);
}
}
Volevo combinare il meglio delle risposte di Gumbo, Graviton e Chris J con i seguenti obiettivi in modo da poterlo utilizzare nella mia app:
a) Inizializza le chiavi dell'array 'sum' al di fuori del ciclo (Gumbo). Dovrebbe aiutare con le prestazioni su array molto grandi (non ancora testato!). Elimina gli avvisi.
b) La logica principale è facile da capire senza toccare i manuali. (Graviton, Chris J).
c) Risolvi il problema più generale di aggiungere i valori di due array qualsiasi con le stesse chiavi e renderlo meno dipendente dalla struttura del sotto-array.
A differenza della soluzione di Gumbo, puoi riutilizzarla nei casi in cui i valori non sono in sotto-array. Immagina nell'esempio seguente che $arr1
e $arr2
non siano hardcoded, ma vengano restituiti come risultato della chiamata di una funzione all'interno di un ciclo.
$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);