Array menyimpan banyak nilai sekaligus, dan begitu data bertambah kita perlu aturan untuk menggabungkan serta membandingkannya. PHP menyediakan operator khusus untuk keperluan itu: operator union (+) yang menggabungkan dua array, operator perbandingan yang maknanya sedikit berbeda dari kasus nilai tunggal, serta notasi [] untuk menambah elemen baru. Pada chapter ini kita akan membedah ketiganya, termasuk aturan “operan kiri menang” pada union yang sering disalahpahami.

Operator Union #

Operator + pada dua array melakukan union berdasarkan key: hasilnya berisi seluruh elemen array kiri, ditambah elemen array kanan yang key-nya belum ada di array kiri. Jika sebuah key ada di kedua array, elemen dari array kiri yang dipertahankan dan elemen array kanan diabaikan — bukan ditimpa:

php
<?php
$pengaturanDefault = [
    "tema" => "terang",
    "bahasa" => "id",
    "notifikasi" => true,
];

$pengaturanUser = [
    "tema" => "gelap",
    "zona_waktu" => "Asia/Jakarta",
];

$aktif = $pengaturanUser + $pengaturanDefault;
print_r($aktif);

Output yang Dihasilkan:

text
Array
(
    [tema] => gelap
    [zona_waktu] => Asia/Jakarta
    [bahasa] => id
    [notifikasi] => 1
)

Hasil union memuat empat key. Nilai "tema" tetap "gelap" — berasal dari array kiri $pengaturanUser — meskipun array kanan juga punya key "tema". Key "bahasa", "notifikasi", dan "zona_waktu" masing-masing hanya ada di salah satu array sehingga semuanya ikut tergabung. Pola seperti ini pas untuk skenario “pengaturan pengguna di atas nilai bawaan”: nilai bawaan hanya mengisi celah yang belum diisi pengguna.

Urutan penulisan operan menentukan hasil, sehingga + tidak komutatif. Membalik posisi kedua array membalik pula siapa yang menang:

php
<?php
$pengaturanDefault = ["tema" => "terang", "bahasa" => "id"];
$pengaturanUser = ["tema" => "gelap"];

print_r($pengaturanDefault + $pengaturanUser);
print_r($pengaturanUser + $pengaturanDefault);

Output yang Dihasilkan:

text
Array
(
    [tema] => terang
    [bahasa] => id
)
Array
(
    [tema] => gelap
    [bahasa] => id
)

Pada union pertama, key "tema" diambil dari $pengaturanDefault sehingga nilainya "terang". Pada union kedua, posisi kiri dipegang $pengaturanUser sehingga "tema" bernilai "gelap". Selalu tanyakan pada diri sendiri: array mana yang harus menang ketika key bentrok — letakkan array itu di sebelah kiri.

Union pada Array Ber-Key Numerik #

Aturan “kiri menang” berlaku sama persis pada key numerik, dan di sinilah union paling sering mengejutkan. Key yang menentukan adalah posisi indeksnya, bukan isinya, sehingga union tidak pernah menggeser elemen:

php
<?php
$timA = ["Andi", "Budi", "Citra"];
$timB = ["Dewi", "Eka", "Fajar", "Gita"];

print_r($timA + $timB);
print_r($timB + $timA);

Output yang Dihasilkan:

text
Array
(
    [0] => Andi
    [1] => Budi
    [2] => Citra
    [3] => Gita
)
Array
(
    [0] => Dewi
    [1] => Eka
    [2] => Fajar
    [3] => Gita
)

Union $timA + $timB menghasilkan Andi, Budi, Citra, lalu Gita: indeks 0, 1, 2 sudah diisi $timA, satu-satunya indeks yang tersisa dari $timB adalah 3. Nama Dewi, Eka, dan Fajar hilang karena indeks mereka sudah “dipakai” — meskipun isinya berbeda. Union kedua ($timB di kiri) mengembalikan $timB apa adanya karena seluruh indeksnya sudah terpenuhi dari kiri.

Perbandingan Array #

Operator == dan === juga berlaku untuk array dengan makna yang sudah kita singgung di chapter Operator Identitas : == memeriksa pasangan key-value yang sama tanpa memedulikan urutan maupun tipe tiap elemen, sedangkan === menuntut pasangan key-value muncul dalam urutan yang sama dengan tipe yang sama:

php
<?php
var_dump([1, 2] == [1, 2]);    // isi identik
var_dump([1, 2] == [2, 1]);    // urutan diabaikan oleh ==
var_dump([1, 2] === [2, 1]);   // urutan diperiksa oleh ===
var_dump([1, 2] == ["1", 2]);  // elemen dibandingkan longgar
var_dump([1, 2] === ["1", 2]); // tipe tiap elemen diperiksa

Output yang Dihasilkan:

text
bool(true)
bool(false)
bool(false)
bool(true)
bool(false)

Baris [1, 2] == [2, 1] menghasilkan true — bagi ==, array yang sama isinya walau berbeda urutan tetap dianggap sama. Operator === menolaknya karena urutan elemen berbeda. Dua baris terakhir menunjukkan perbandingan dilakukan per elemen: "1" dianggap sama dengan 1 oleh ==, tetapi ditolak === karena beda tipe. Perlu dicatat juga bahwa != adalah kebalikan == dan !== adalah kebalikan ===, persis seperti pada nilai tunggal; operator < dan > pada array memiliki aturan penghitungan elemen yang jarang dibutuhkan dan tidak akan kita bahas di sini.

Menambah Elemen dengan Kurung Siku #

Bukan operator dalam arti ketat, tetapi notasi [] di belakang nama array adalah cara baku menambahkan elemen baru ke posisi paling akhir. PHP otomatis menempatkan elemen pada indeks numerik berikutnya yang masih kosong:

php
<?php
$belanjaan = [];

$belanjaan[] = "Beras 5 kg";
$belanjaan[] = "Minyak goreng 1 L";
$belanjaan[] = "Gula 1 kg";

print_r($belanjaan);

Output yang Dihasilkan:

text
Array
(
    [0] => Beras 5 kg
    [1] => Minyak goreng 1 L
    [2] => Gula 1 kg
)

Penugasan $belanjaan[] = "Beras 5 kg"; menaruh string tersebut pada indeks 0 karena array masih kosong; pernyataan berikutnya mengisi indeks 1, lalu 2. Notasi ini adalah pasangan alami operator assignment dari chapter sebelumnya, dan pola “buat array kosong lalu isi bertahap” adalah pola yang akan Anda tulis berkali-kali di Section Arrays dan Collections.

Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh chapter ini dalam satu program yang bisa dijalankan langsung.

Referensi #

Ringkasan #

Operator union + menggabungkan array berdasarkan key dengan aturan tegas: elemen array kiri selalu menang dan array kanan hanya mengisi key yang belum ada — berlaku juga untuk indeks numerik. Perbandingan == menerima array dengan isi sama walau urutannya berbeda, sedangkan === menuntut urutan dan tipe elemen yang sama. Notasi [] melengkapi keduanya sebagai cara menambah elemen di posisi akhir. Berikutnya kita turun ke lapisan paling dasar komputer: operator bitwise yang mengolah angka dalam bentuk bit.

Berkas Sumber

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

contoh.php

Unduh berkas
php
<?php
// contoh.php — rangkuman Operator Array
// Jalankan dengan: php contoh.php

echo "== Union: kiri menang ==\n";
$pengaturanDefault = [
    "tema" => "terang",
    "bahasa" => "id",
    "notifikasi" => true,
];
$pengaturanUser = [
    "tema" => "gelap",
    "zona_waktu" => "Asia/Jakarta",
];

$aktif = $pengaturanUser + $pengaturanDefault;
print_r($aktif);

echo "\n== Union tidak komutatif ==\n";
$a = ["tema" => "terang", "bahasa" => "id"];
$b = ["tema" => "gelap"];

print_r($a + $b);
print_r($b + $a);

echo "\n== Union pada key numerik ==\n";
$timA = ["Andi", "Budi", "Citra"];
$timB = ["Dewi", "Eka", "Fajar", "Gita"];

print_r($timA + $timB);
print_r($timB + $timA);

echo "\n== Perbandingan array ==\n";
var_dump([1, 2] == [1, 2]);
var_dump([1, 2] == [2, 1]);
var_dump([1, 2] === [2, 1]);
var_dump([1, 2] == ["1", 2]);
var_dump([1, 2] === ["1", 2]);

echo "\n== Menambah elemen dengan [] ==\n";
$belanjaan = [];
$belanjaan[] = "Beras 5 kg";
$belanjaan[] = "Minyak goreng 1 L";
$belanjaan[] = "Gula 1 kg";
print_r($belanjaan);