Versi lain, dengan beberapa keunggulan di bawah.
$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);
}
}
Saya ingin menggabungkan yang terbaik dari jawaban Gumbo, Graviton, dan Chris J dengan tujuan berikut sehingga saya dapat menggunakan ini di aplikasi saya:
a) Inisialisasi kunci array 'sum' di luar loop (Gumbo). Harus membantu dengan kinerja pada array yang sangat besar (belum diuji!). Menghilangkan pemberitahuan.
b) Logika utama mudah dipahami tanpa harus membaca manual. (Graviton, Chris J).
c) Selesaikan masalah yang lebih umum untuk menambahkan nilai dari dua larik mana pun dengan kunci yang sama dan membuatnya kurang bergantung pada struktur sub larik.
Tidak seperti solusi Gumbo, Anda dapat menggunakan kembali ini jika nilainya tidak berada dalam sub larik. Bayangkan dalam contoh di bawah ini $arr1
dan $arr2
tidak dikodekan dengan keras, tetapi dikembalikan sebagai hasil dari memanggil fungsi di dalam loop.
$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);