Jadi, apa perbedaan antara 2: array_merge , tanda plus ini (meskipun saya harus beralih di sekitar array)?
Joseph Silber
15
Perhatian bagi pemula di sini, hasil operasi dalam kedua kasus tersebut adalah null jika salah satu array bernilai null . Beberapa orang mungkin tidak peduli dengan asumsi ini karena ini adalah operasi gabungan, hasilnya akan menjadi array yang tepat (bukan-null) jika salah satunya adalah null . Tapi, itu berlaku jika salah satu array adalah array kosong. Jadi, sebagai praktik yang baik, saya pikir, kita harus menginisialisasi array input sebagai array kosong. Apa yang kalian katakan?
Sandeepan Nath
6
Jika ada kunci duplikat, "mengambil serikat" akan selalu memiliki menyingkirkan salah satu dari mereka. Perbedaannya adalah yang mana.
alexis
5
Maaf, jawaban ini membingungkan, salah, dan tidak lengkap. : -o Lihat komentar @ alexis tentang bit yang membingungkan (meskipun dia juga hanya setengah dari kebenaran tentang OP). 2. Lihat jawaban Yehosef tentang apa yang array_mergesebenarnya ... 3. Dan lihat jawaban BoltClock tentang perbedaan penting lainnya yang tidak disebutkan di sini: array_mergemenyetel ulang kunci numerik, tidak seperti +.
Sz.
tidak spesifik sama sekali. tidak membantu. tidak menonjolkan perbedaannya. penjelasan yang terlalu tinggi.
Perhatikan bahwa kunci non-numerik duplikat akan mengambil nilai pertama menggunakan operator gabungan tetapi yang kemudian menggunakan array_merge.
Untuk kunci numerik, nilai pertama akan digunakan dengan operator gabungan sedangkan semua nilai akan digunakan dengan array_merge, baru saja diindeks ulang.
Saya biasanya menggunakan operator union untuk array asosiatif dan array_merge untuk numerik. Tentu saja, Anda juga dapat menggunakan array_merge untuk asosiatif, hanya saja nilai yang lebih baru menimpa nilai sebelumnya.
array_merge()menyebabkan semua kunci numerik yang ditemukan dalam larik input akan diindeks ulang dalam larik resultan. Operator serikat +tidak menyebabkan indeks ulang.
Menarik untuk dicatat dalam hal ini adalah bahwa array_mergeactally menghapus '3' indeks nomor tiga meskipun itu string, karena itu angka.
Jadi berhati-hatilah saat menggabungkan dengan array_mergearray dengan indeks numerik. Mereka mungkin kehilangan kunci mereka. jika mereka penting bagi Anda, awali dengan sebuah string.
jadi alih-alih '3' => 'three'menggunakan sesuatu seperti'_3' => 'three'
Contoh lain (array tanpa kunci eksplisit; jelas terkait dengan cara kerja +dan operator array_merge, tetapi hal yang "jelas" lebih sederhana jika dilihat;))
Harap perhatikan perbedaan lainnya: union (+) tidak akan menimpa nilai yang tidak kosong dengan nilai kosong (dengan mempertimbangkan kunci yang sama), sedangkan array_merge akan:
$a = array('foo'=>'bar');
$b = array('foo'=>'');// or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
Jawaban:
Perbedaannya adalah:
The
+
Operator mengambil penyatuan dua array, sedangkanarray_merge
fungsi mengambil serikat NAMUN duplikat kunci yang ditimpa.sumber
array_merge
sebenarnya ... 3. Dan lihat jawaban BoltClock tentang perbedaan penting lainnya yang tidak disebutkan di sini:array_merge
menyetel ulang kunci numerik, tidak seperti+
.Berikut adalah tes ilustrasi sederhana:
dengan hasil:
Perhatikan bahwa kunci non-numerik duplikat akan mengambil nilai pertama menggunakan operator gabungan tetapi yang kemudian menggunakan array_merge.
Untuk kunci numerik, nilai pertama akan digunakan dengan operator gabungan sedangkan semua nilai akan digunakan dengan array_merge, baru saja diindeks ulang.
Saya biasanya menggunakan operator union untuk array asosiatif dan array_merge untuk numerik. Tentu saja, Anda juga dapat menggunakan array_merge untuk asosiatif, hanya saja nilai yang lebih baru menimpa nilai sebelumnya.
sumber
array_merge()
menyebabkan semua kunci numerik yang ditemukan dalam larik input akan diindeks ulang dalam larik resultan. Operator serikat+
tidak menyebabkan indeks ulang.sumber
Sumber: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/
Berhenti menggunakan array_merge ($ defaults, $ options):
Catatan : fungsi array_replace ada sejak PHP5.3.
sumber
Tanda + hanya mengambil nilai dari kemunculan pertama dari kunci array.
array_merge mengambil nilai dari kemunculan terakhir dari kunci array.
Contoh:
Output ini:
Menarik untuk dicatat dalam hal ini adalah bahwa
array_merge
actally menghapus '3' indeks nomor tiga meskipun itu string, karena itu angka.Jadi berhati-hatilah saat menggabungkan dengan
array_merge
array dengan indeks numerik. Mereka mungkin kehilangan kunci mereka. jika mereka penting bagi Anda, awali dengan sebuah string.jadi alih-alih
'3' => 'three'
menggunakan sesuatu seperti'_3' => 'three'
sumber
Saya percaya
array_merge
menimpa kunci non_numerik duplikat sementara$array1 + $array2
tidak.sumber
Contoh lain (array tanpa kunci eksplisit; jelas terkait dengan cara kerja
+
dan operatorarray_merge
, tetapi hal yang "jelas" lebih sederhana jika dilihat;))akan memberi:
sumber
Harap perhatikan perbedaan lainnya: union (+) tidak akan menimpa nilai yang tidak kosong dengan nilai kosong (dengan mempertimbangkan kunci yang sama), sedangkan array_merge akan:
Keluaran:
sumber
Jadi ternyata jika Anda mengubah urutan union dan merge akan melakukan hal yang sama
Keluaran:
Ingatlah urutan array.
sumber
$a+$b
vs$b+$a
. Tidak ada yang diganti.