[$a, $b] = $array; membongkar elemen-elemen array ke variabel terpisah dalam satu baris: $a mendapat $array[0], $b mendapat $array[1]. list($a, $b) = $array; adalah penulisan lama untuk hal yang sama, dan ['name' => $name] = $user; melakukannya berdasarkan key.
Memasangkan destructuring dengan explode() adalah penggunaan klasiknya: pecah string, beri nama potongannya, lanjut.
Melewati elemen
Kosongkan sebuah posisi untuk melewatinya. Kamu juga bisa berhenti lebih awal: elemen di akhir yang tidak dipakai akan diabaikan.
Destructuring array asosiatif berdasarkan key
Dengan key, urutan di array tidak penting dan kamu hanya mengambil field yang kamu butuhkan. Key ditulis sebelum =>, variabelnya sesudahnya.
Pola juga bisa bersarang dengan cara yang sama untuk list: [[$x1, $y1], [$x2, $y2]] = $line; membaca dua titik sekaligus. Sejak PHP 7.3, variabel di dalam pola juga bisa berupa referensi, [, &$second] = $counts;, jadi mengubah $second akan mengubah array-nya.
Satu assignment memakai posisi atau key, tidak pernah keduanya. [$a, 'k' => $b] = $arr; berhenti dengan Cannot mix keyed and unkeyed array entries in assignments.
Menukar nilai dua variabel
Buat array berisi kedua nilai dengan urutan terbalik, lalu lakukan destructuring kembali. Tidak perlu variabel sementara.
Mengembalikan beberapa nilai dari fungsi
Fungsi PHP mengembalikan satu nilai, tetapi nilai itu boleh berupa array. Destructuring di tempat pemanggilan membuatnya terbaca seperti beberapa nilai kembalian. Untuk lebih dari dua atau tiga nilai, kembalikan dengan key supaya pemanggil tidak tertukar urutannya.
Destructuring di foreach
Sintaks yang sama bekerja di baris foreach, jadi setiap baris data datang dalam keadaan sudah dipecah menjadi variabel bernama. Inilah yang dimaksud orang dengan "foreach dengan list()". Pola loop lainnya ada di halaman foreach.
Spread operator (...)
Tiga titik membongkar array di tempat. Di literal array, [...$a, ...$b] menggabungkan array. Di pemanggilan fungsi, f(...$args) mengirim elemen-elemennya sebagai argumen terpisah. Di definisi fungsi, ...$args mengumpulkan argumen tambahan ke dalam sebuah array.
Sebelum PHP 8.1, melakukan spread pada array dengan key string menghasilkan error; sekarang key string dipertahankan dan key numerik dinomori ulang, aturan yang sama dengan array_merge(). Parameter variadic seperti ...$amounts dibahas bersama jenis parameter lainnya di halaman fungsi.
Kesalahan umum: elemen lebih sedikit daripada variabel
Kalau array-nya lebih pendek daripada polanya, variabel yang tidak kebagian menjadi null dan PHP mencetak warning untuk masing-masing. Ini terjadi pada input yang tidak kamu kendalikan, misalnya baris data yang field-nya tidak lengkap. Untuk [$name, $city, $country] = explode(',', 'Grace');, PHP mencetak:
Warning: Undefined array key 1 in /var/www/html/import.php on line 5
Warning: Undefined array key 2 in /var/www/html/import.php on line 5
Tentukan apa nilai untuk bagian yang hilang, lalu lengkapi array-nya sebelum destructuring:
Untuk pola dengan key, gabungkan dulu nilai bawaannya: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. Operator + hanya menambahkan key yang belum dimiliki $input.
Pertanyaan yang sering diajukan
Apa fungsi list() di PHP?
list($a, $b) = $array; mengisi $array[0] ke $a dan $array[1] ke $b. Sejak PHP 7.1, bentuk singkat [$a, $b] = $array; melakukan hal yang persis sama, dan kedua bentuk menerima key: ['id' => $id] = $row;.
Bagaimana cara menukar nilai dua variabel di PHP?
Lakukan destructuring pada array baru yang disusun dari keduanya dengan urutan terbalik: [$a, $b] = [$b, $a];. Tidak perlu variabel sementara.
Apakah list() bisa dipakai dengan array asosiatif di PHP?
Bisa, sejak PHP 7.1. Sebutkan key-nya: ['name' => $name, 'email' => $email] = $user; atau list('name' => $name) = $user;. Tanpa key, [$a, $b] = $user; mencari key 0 dan 1, lalu mendapat null disertai warning.
Apa arti tiga titik (...) di PHP?
Itu spread operator. Di literal array, [...$a, ...$b] menyalin elemen dari kedua array ke array baru. Di pemanggilan fungsi, max(...$numbers) mengirim elemen-elemennya sebagai argumen terpisah. Di definisi fungsi, function sum(...$numbers) mengumpulkan argumen dalam jumlah berapa pun ke dalam sebuah array.
Apa yang terjadi kalau array berisi lebih sedikit elemen daripada variabel di list()?
Variabel yang berlebih mendapat null, dan PHP mencetak warning seperti Undefined array key 2. Lengkapi array-nya dulu, misalnya [$a, $b, $c] = array_pad($parts, 3, null);.