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
<?php
$menuUtama = ["Beranda", "Produk", "Harga"];
$menuTambahan = ["Tentang Kami", "Kontak"];

$menuLengkap = [...$menuUtama, ...$menuTambahan];

echo implode(" | ", $menuLengkap) . "\n";

Output yang Dihasilkan:

text
Beranda | Produk | Harga | Tentang Kami | Kontak

Mari kita telaah baris-baris kode di atas:

  1. Baris 2-3: dua array indexed dideklarasikan sebagai sumber penggabungan.
  2. Baris 5 ($menuLengkap = [...$menuUtama, ...$menuTambahan];): interpreter membongkar elemen $menuUtama terlebih dahulu (Beranda, Produk, Harga), lalu menyusul elemen $menuTambahan (Tentang Kami, Kontak) di belakangnya.
  3. 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
<?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:

text
gelap
en
aktif

Pada 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
<?php
$stokGudangA = [10 => "kayu", 25 => "besi"];
$stokGudangB = [40 => "kaca"];

$gabungan = [...$stokGudangA, ...$stokGudangB];

print_r($gabungan);

Output yang Dihasilkan:

text
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
<?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:

text
35000
35000
12000

Meskipun hasilnya sama, keduanya punya perbedaan penting berikut:

AspekSpread operator ...array_merge()
Bentuk penulisanBagian dari array literalPanggilan function biasa
Sumber dataArray maupun iterable apa pun (termasuk generator)Hanya array
Kunci stringDidukung sejak PHP 8.1Didukung sejak awal
KinerjaLebih cepat untuk penggabungan banyak arraySedikit 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
<?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:

text
245
345

Parameter 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 #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

contoh.php

Unduh berkas
php
<?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";