Menggabungkan beberapa array sering kita lakukan: menyatukan menu navigasi, menumpuk daftar pesanan, atau memadukan pengaturan default milik aplikasi dengan preferensi milik pengguna. Cara lama adalah memanggil array_merge() berulang kali atau menyalin elemen satu per satu. PHP menyediakan cara yang lebih ringkas bernama array unpacking memakai spread operator (tanda tiga titik ...), yang membongkar isi sebuah array langsung di dalam array literal. Pada Chapter ini kita mempelajari cara kerja spread operator, aturan urutan penggabungannya, perbedaannya dengan array_merge(), serta penggunaannya pada pemanggilan fungsi.
Menggabungkan Array dengan Spread Operator #
Spread operator ditulis sebelum nama variabel array di dalam tanda kurung siku. Ketika interpreter PHP membangun array baru, setiap kemunculan ...$variabel digantikan seluruh elemen array tersebut, satu per satu sesuai urutannya. Operator ini hanya boleh dipakai di dalam array literal atau pemanggilan fungsi, bukan sebagai perintah mandiri.
Mari kita lihat wujudnya dalam penggabungan dua menu navigasi:
<?php
$menuUtama = ["Beranda", "Produk", "Harga"];
$menuTambahan = ["Tentang Kami", "Kontak"];
$menuLengkap = [...$menuUtama, ...$menuTambahan];
echo implode(" | ", $menuLengkap) . "\n";Output yang Dihasilkan:
Beranda | Produk | Harga | Tentang Kami | KontakMari kita telaah baris-baris kode di atas:
- Baris 2-3: dua array indexed dideklarasikan sebagai sumber penggabungan.
- Baris 5 (
$menuLengkap = [...$menuUtama, ...$menuTambahan];): interpreter membongkar elemen$menuUtamaterlebih dahulu (Beranda,Produk,Harga), lalu menyusul elemen$menuTambahan(Tentang Kami,Kontak) di belakangnya. - Baris 7 (
implode(...)): menggabungkan kelima elemen hasil penggabungan menjadi satu string pemisah|.
Elemen biasa juga boleh dicampur dengan spread operator, misalnya [...$lama, "itemBaru"] — cukup tulis elemen baru tersebut di posisi yang kita inginkan.
Urutan Penggabungan — yang Belakang Menang #
Elemen diproses dari kiri ke kanan, sehingga ketika dua array memiliki kunci string yang sama, nilai dari array yang dibongkar paling belakang menimpa nilai sebelumnya. Perilaku ini sangat berguna untuk pola “default ditimpa preferensi pengguna”:
<?php
$pengaturanDefault = [
"tema" => "terang",
"bahasa" => "id",
"notifikasi" => "aktif",
];
$pengaturanUser = [
"tema" => "gelap",
"bahasa" => "en",
];
$hasilAkhir = [...$pengaturanDefault, ...$pengaturanUser];
echo $hasilAkhir["tema"] . "\n";
echo $hasilAkhir["bahasa"] . "\n";
echo $hasilAkhir["notifikasi"] . "\n";Output yang Dihasilkan:
gelap
en
aktifPada contoh di atas, $pengaturanUser dibongkar setelah $pengaturanDefault, sehingga kunci tema bernilai gelap dan bahasa bernilai en. Kunci notifikasi hanya ada di pengaturan default, jadi nilai aktif tetap terbawa. Jika urutan spread dibalik, pengaturan default justru akan menimpa preferensi pengguna — urutan penulisan menentukan segalanya.
Perilaku pada Kunci Integer dan Kunci String #
Spread operator memperlakukan dua jenis kunci secara berbeda. Kunci integer dari array sumber tidak dipertahankan; elemen bernomor diberi nomor baru berurutan dari 0. Kunci string, sebaliknya, dipertahankan apa adanya sehingga penimpaan pada bagian sebelumnya menjadi mungkin.
<?php
$stokGudangA = [10 => "kayu", 25 => "besi"];
$stokGudangB = [40 => "kaca"];
$gabungan = [...$stokGudangA, ...$stokGudangB];
print_r($gabungan);Output yang Dihasilkan:
Array
(
[0] => kayu
[1] => besi
[2] => kaca
)Kunci 10, 25, dan 40 dari array sumber menghilang dan digantikan kunci 0, 1, dan 2 pada array hasil. Pola penomoran ulang ini identik dengan perilaku penambahan elemen bernomor secara manual, sehingga hasilnya selalu array yang rapi tanpa celah kunci.
Spread Operator vs array_merge #
Untuk penggabungan sederhana, array_merge() dan spread operator sering menghasilkan keluaran yang sama persis. Keduanya menomori ulang kunci integer, dan keduanya menerapkan aturan “yang belakang menang” untuk kunci string.
<?php
$hargaLama = ["kopi" => 30000, "teh" => 10000];
$hargaBaru = ["kopi" => 35000, "gula" => 12000];
$denganSpread = [...$hargaLama, ...$hargaBaru];
$denganMerge = array_merge($hargaLama, $hargaBaru);
echo $denganSpread["kopi"] . "\n";
echo $denganMerge["kopi"] . "\n";
echo $denganSpread["gula"] . "\n";Output yang Dihasilkan:
35000
35000
12000Meskipun hasilnya sama, keduanya punya perbedaan penting berikut:
| Aspek | Spread operator ... | array_merge() |
|---|---|---|
| Bentuk penulisan | Bagian dari array literal | Panggilan function biasa |
| Sumber data | Array maupun iterable apa pun (termasuk generator) | Hanya array |
| Kunci string | Didukung sejak PHP 8.1 | Didukung sejak awal |
| Kinerja | Lebih cepat untuk penggabungan banyak array | Sedikit lebih lambat |
Pembahasan mendalam tentang array_merge() beserta sepupunya array_replace() menanti pada chapter Array Merge dan Difference
.
Spread Operator dalam Pemanggilan Fungsi #
Selain di array literal, spread operator juga dipakai ketika memanggil fungsi: setiap elemen array dipecah menjadi argument terpisah. Fitur ini berpasangan dengan variadic function — fungsi yang menerima jumlah argument tidak terbatas melalui parameter ...$nama. Section Fungsi akan membahasnya tuntas; untuk sekarang, perhatikan contoh singkat berikut:
<?php
function jumlahkan(int ...$angka): int
{
$total = 0;
foreach ($angka as $satuAngka) {
$total += $satuAngka;
}
return $total;
}
$nilaiUjian = [80, 75, 90];
echo jumlahkan(...$nilaiUjian) . "\n";
echo jumlahkan(100, ...$nilaiUjian) . "\n";Output yang Dihasilkan:
245
345Parameter int ...$angka mengumpulkan setiap argument yang masuk menjadi satu array bernama $angka. Sebaliknya, jumlahkan(...$nilaiUjian) membongkar array [80, 75, 90] menjadi tiga argument 80, 75, dan 90. Kedua arah ini saling melengkapi: variadic mengumpulkan, spread memecah.
Ringkasan #
Spread operator ... membongkar array langsung di dalam array literal dan pemanggilan fungsi. Penggabungan berlangsung dari kiri ke kanan dengan aturan kunci string “yang belakang menang”, sementara kunci integer selalu dinomori ulang mulai dari nol. Dibanding array_merge(), spread operator lebih ringkas, lebih cepat, dan menerima iterable apa pun. Setelah nyaman membongkar array ke dalam array lain, kita berbalik arah pada chapter berikutnya: membongkar array ke dalam variabel-variabel terpisah dengan array destructuring.
Referensi #
- Dokumentasi resmi array PHP (termasuk unpacking)
- Referensi fungsi array di php.net
array_merge()di php.net- Fitur baru PHP 8.1 — string key unpacking
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
contoh.php
Unduh berkas<?php
/**
* contoh.php — rangkuman Chapter Array Unpacking.
* Jalankan: php contoh.php
*/
// 1. Menggabungkan array dengan spread operator.
$menuUtama = ["Beranda", "Produk", "Harga"];
$menuTambahan = ["Tentang Kami", "Kontak"];
$menuLengkap = [...$menuUtama, ...$menuTambahan];
echo "Menu: " . implode(" | ", $menuLengkap) . "\n";
// 2. Penggabungan pengaturan — array yang dibongkar belakangan menang.
$pengaturanDefault = [
"tema" => "terang",
"bahasa" => "id",
"notifikasi" => "aktif",
];
$pengaturanUser = [
"tema" => "gelap",
];
$pengaturanAkhir = [...$pengaturanDefault, ...$pengaturanUser];
echo "Tema: {$pengaturanAkhir["tema"]}\n";
echo "Bahasa: {$pengaturanAkhir["bahasa"]}\n";
echo "Notifikasi: {$pengaturanAkhir["notifikasi"]}\n";
// 3. Spread operator dalam pemanggilan fungsi variadic.
function jumlahkan(int ...$angka): int
{
$total = 0;
foreach ($angka as $satuAngka) {
$total += $satuAngka;
}
return $total;
}
$nilaiUjian = [80, 75, 90];
echo "Total nilai: " . jumlahkan(...$nilaiUjian) . "\n";