Bagaimana cara menambahkan satu array ke array lain tanpa membandingkan kunci mereka?
$a = array( 'a', 'b' );
$b = array( 'c', 'd' );
Pada akhirnya seharusnya: Array( [0]=>a [1]=>b [2]=>c [3]=>d )
Jika saya menggunakan sesuatu seperti []
atau array_push
, itu akan menyebabkan salah satu dari hasil ini:
Array( [0]=>a [1]=>b [2]=>Array( [0]=>c [1]=>d ) )
//or
Array( [0]=>c [1]=>d )
Seharusnya sesuatu, melakukan ini, tetapi dengan cara yang lebih elegan:
foreach ( $b AS $var )
$a[] = $var;
array_merge ($a, $b)
harus melakukan apa yang Anda inginkan, setidaknya dengan PHP 5+.array_merge();
output yangarray_merge();
harus tepat apa yang Anda butuhkan:print_r(array_merge($a,$b)); // outputs => Array ( [0] => a [1] => b [2] => c [3] => d )
Jawaban:
array_merge
adalah cara yang elegan:Melakukan sesuatu seperti:
Tidak akan bekerja, karena
+
operator sebenarnya tidak menggabungkannya. Jika mereka$a
memiliki kunci yang sama$b
, itu tidak akan melakukan apa pun.sumber
Cara lain untuk melakukan ini di PHP 5.6+ adalah dengan menggunakan
...
tokenIni juga akan bekerja dengan siapa saja
Traversable
Sebuah peringatan meskipun:
$b
array kosong atau tidak dapat dilewati misalnya bukan array$b
tidak dapat dilaluisumber
...
biasa disebut sebagaisplat operator
di php.array_push
menerima argumen tunggal sejak php 7.3, yang mencegah kesalahan dengan array kosong.Kenapa tidak digunakan
Mengapa Anda tidak ingin menggunakan ini, metode bawaan yang benar.
sumber
PHP append one array to another (not array_merge or array_push)
... kemudian dimodifikasiPHP append one array to another (not array_merge or +)
sebelum berubah ke judul saat iniItu posting yang cukup lama, tapi saya ingin menambahkan sesuatu tentang menambahkan satu array ke yang lain:
Jika
Anda dapat menggunakan fungsi array seperti ini:
array_merge tidak menggabungkan kunci numerik sehingga menambahkan semua nilai $ appendArray. Saat menggunakan fungsi php asli alih-alih foreach-loop, seharusnya lebih cepat pada array dengan banyak elemen.
Tambahan 2019-12-13: Sejak PHP 7.4, ada kemungkinan untuk menambahkan atau menambahkan array dengan cara Array Spread Operator:
Seperti sebelumnya, kunci dapat menjadi masalah dengan fitur baru ini:
"Kesalahan fatal: Kesalahan Tidak Berhasil: Tidak dapat membuka array dengan kunci string"
array (4) {[1] => int (1) [4] => int (2) [5] => int (3) [6] => int (4)}
array (3) {[0] => int (1) [1] => int (4) [3] => int (3)}
sumber
Keluaran:
Kode Sumber Referensi
sumber
Untuk array besar, lebih baik untuk menggabungkan tanpa array_merge, untuk menghindari salinan memori.
sumber
Sebagai lanjutan dari jawaban oleh bstoney dan Snark saya melakukan beberapa tes pada berbagai metode:
Yang menghasilkan:
ASLI: Saya percaya pada PHP 7, metode 3 adalah alternatif yang jauh lebih baik karena cara foreach loop sekarang bertindak , yaitu membuat salinan array yang diulang.
Sementara metode 3 tidak sepenuhnya merupakan jawaban untuk kriteria 'tidak array_push' dalam pertanyaan, itu adalah satu baris dan kinerja paling tinggi dalam semua hal, saya pikir pertanyaan itu ditanyakan sebelum ... sintaks adalah pilihan.
UPDATE 25/03/2020: Saya telah memperbarui tes yang cacat karena variabel tidak disetel ulang. Menariknya (atau membingungkan) hasilnya sekarang menunjukkan sebagai tes 1 sebagai yang tercepat, di mana itu paling lambat, setelah dari 0,008392 ke 0,002717! Ini hanya bisa turun ke pembaruan PHP, karena ini tidak akan terpengaruh oleh cacat pengujian.
Jadi, saga berlanjut, saya akan mulai menggunakan array_merge mulai sekarang!
sumber
Sejak PHP 7.4 Anda dapat menggunakan ... operator . Ini juga dikenal sebagai operator percikan dalam bahasa lain, termasuk Ruby.
Keluaran
Operator percikan harus memiliki kinerja yang lebih baik daripada array_merge . Itu tidak hanya karena operator percikan adalah struktur bahasa sementara array_merge adalah fungsi, tetapi juga karena kompilasi optimasi waktu dapat dilakukan untuk array konstan.
Selain itu, kita dapat menggunakan sintaks operator percikan di mana-mana dalam array, karena elemen normal dapat ditambahkan sebelum atau setelah operator percikan.
sumber
Sebelum PHP7 Anda dapat menggunakan:
array_splice()
beroperasi dengan referensi ke array (argumen 1) dan menempatkan nilai array (argumen 4) di tempat daftar nilai dimulai dari argumen 2 dan jumlah argumen 3. Ketika kita menetapkan argumen ke-2 sebagai akhir dari array sumber dan ke-3 sebagai nol kita menambahkan nilai-nilai argumen ke-4 ke argumen ke-1sumber
jika Anda ingin menggabungkan array kosong dengan nilai baru yang ada. Anda harus menginisialisasi terlebih dahulu.
Semoga bantuannya.
sumber
foreach loop lebih cepat dari array_merge untuk menambahkan nilai ke array yang sudah ada, jadi pilih loop sebagai gantinya jika Anda ingin menambahkan array ke akhir yang lain.
sumber
Bagaimana dengan ini:
sumber
'0' => 'a'
bukan ... bukan0 => 'a'
?array + array