explode($separator, $string) memecah string di setiap kemunculan $separator dan mengembalikan potongan-potongannya sebagai array. explode(',', 'apple,banana,cherry') menghasilkan ['apple', 'banana', 'cherry'].
Pemisahnya bisa berupa string apa pun, bukan hanya satu karakter: explode(' and ', 'tea and milk and sugar') bekerja dengan cara yang sama. Operasi kebalikannya, menggabungkan array kembali menjadi string, adalah implode().
Sintaks dan nilai kembalian
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
Fungsi ini selalu mengembalikan array. Kalau pemisahnya tidak muncul, array itu berisi seluruh string sebagai satu-satunya elemen. Itu berlaku juga untuk string kosong, yang menghasilkan array berisi satu string kosong, sumber umum bug "loop-ku berjalan sekali pada input kosong".
Membatasi jumlah potongan
Argumen ketiga, $limit, mengubah berapa banyak potongan yang kamu dapat:
- Limit positif mengembalikan paling banyak sejumlah itu. Potongan terakhir berisi sisa string, termasuk pemisahnya.
- Limit negatif mengembalikan setiap potongan kecuali
abs($limit)potongan terakhir. - Limit
0diperlakukan sebagai1.
Limit positif adalah alat yang tepat saat hanya pemisah pertama yang penting, misalnya baris key=value yang nilainya mungkin juga mengandung =: explode('=', 'query=a=b', 2) menghasilkan ['query', 'a=b']. Bagian-bagian berikutnya memakainya dengan cara itu.
Untuk mengambil potongan terakhir saja, simpan dulu array-nya ke variabel: $parts = explode('/', $path); $file = end($parts);. Menulis end(explode('/', $path)) tetap mengembalikan nilai yang benar, tetapi PHP mencetak Notice: Only variables should be passed by reference, karena end() menerima argumennya lewat referensi.
Memecah string berdasarkan baris baru
explode("\n", $text) memecah di setiap baris baru. Pakai kutip ganda: di dalam kutip tunggal, '\n' adalah backslash diikuti huruf n, bukan baris baru. Teks dari file Windows atau formulir HTML sering mengakhiri baris dengan "\r\n", yang meninggalkan "\r" di akhir setiap potongan. preg_split('/\R/', $text) memecah di jenis baris baru apa pun.
Memangkas potongan dan membuang yang kosong
Input pengguna seperti "red, green , ,blue" punya spasi di sekitar item-itemnya dan sebuah item kosong di tengah. Lewatkan potongan-potongannya ke trim() dengan array_map(), lalu buang string kosong dengan array_filter(). array_values() menomori ulang key-nya sesudahnya, karena array_filter() mempertahankan key aslinya.
Callback fn($c) => $c !== '' tetap menyimpan string "0". array_filter($colors) tanpa callback akan membuangnya, karena "0" bernilai falsy.
Mengubah string menjadi array asosiatif
Pengaturan, cookie, dan string mirip query sering disimpan sebagai pasangan key=value. Lakukan explode dua kali: sekali untuk pasangan-pasangannya, sekali untuk setiap pasangan dengan limit 2, lalu bongkar kedua potongannya ke variabel (destructuring array).
Pasangan tanpa =, seperti debug, menghasilkan array berisi satu elemen, dan destructuring-nya mencetak Warning: Undefined array key 1. Lengkapi hasilnya menjadi dua elemen untuk menghindarinya: [$key, $value] = explode('=', $pair, 2) + [1 => ''];.
Untuk query string URL sungguhan, parse_str() melakukan ini untukmu dan juga men-decode %20 dan +.
Memecah dengan beberapa pemisah
explode() hanya menerima satu pemisah. Untuk memecah di koma, titik koma, atau spasi, pakai preg_split() dengan character class. PREG_SPLIT_NO_EMPTY membuang potongan kosong yang muncul saat ada dua pemisah berturut-turut.
Teks Jepang dan teks UTF-8 lainnya
explode() membandingkan byte, dan di UTF-8 sebuah karakter utuh tidak pernah muncul di dalam byte karakter lain, jadi memecah teks Jepang dengan pemisah Jepang seperti 、 atau koma full-width bekerja dengan benar.
explode vs str_split vs preg_split
| Fungsi | Memecah di | Contoh | Hasil |
|---|---|---|---|
explode() | string pemisah yang tetap | explode('-', '2026-03-14') | ['2026', '03', '14'] |
str_split() | setiap N byte | str_split('abcdef', 2) | ['ab', 'cd', 'ef'] |
mb_str_split() | setiap N karakter | mb_str_split('日本語') | ['日', '本', '語'] |
preg_split() | sebuah regular expression | preg_split('/\s+/', 'a b') | ['a', 'b'] |
explode() tidak memproses regex, jadi lebih cepat daripada preg_split() dan menjadi pilihan setiap kali pemisahnya berupa string tetap.
Kesalahan umum: pemisah kosong
Pemisah kosong adalah error. Sejak PHP 8.0, explode('', 'abc') melempar ValueError alih-alih mengembalikan false, dan script berhenti:
PHP Fatal error: Uncaught ValueError: explode(): Argument #1 ($separator) cannot be empty in /home/index.php:3
Untuk memecah string menjadi karakter, pakai str_split('abc') untuk teks ASCII atau mb_str_split($s) untuk teks apa pun yang mungkin mengandung karakter multibyte.
Pertanyaan yang sering diajukan
Apa fungsi explode() di PHP?
Fungsi ini memecah string di setiap kemunculan pemisah dan mengembalikan potongan-potongannya sebagai array: explode(',', 'a,b,c') mengembalikan ['a', 'b', 'c']. Pemisahnya sendiri tidak ikut di potongan mana pun.
Apa yang dikembalikan explode() kalau pemisahnya tidak ditemukan?
Array berisi satu elemen, yaitu seluruh string: explode(',', 'apple') mengembalikan ['apple']. String kosong menghasilkan [''], array berisi satu string kosong, jadi count() mengembalikan 1, bukan 0.
Bagaimana cara melakukan explode dengan beberapa pemisah di PHP?
Pakai preg_split() dengan character class: preg_split('/[,;|]/', $s) memecah di koma, titik koma, dan garis tegak. Untuk sekaligus membuang potongan kosong, berikan limit -1 dan flag-nya: preg_split('/[,;|]/', $s, -1, PREG_SPLIT_NO_EMPTY).
Apa bedanya explode() dan str_split()?
explode() memecah di pemisah yang kamu pilih. str_split($s, 3) memotong string menjadi bagian-bagian dengan panjang tetap, dihitung dalam byte. Untuk teks Jepang atau teks multibyte lainnya, pakai mb_str_split($s), yang menghitung karakter.
Kenapa explode() melempar ValueError?
Karena pemisahnya berupa string kosong. Sejak PHP 8.0, explode('', $s) melempar ValueError: explode(): Argument #1 ($separator) cannot be empty. Untuk memecah string menjadi karakter tunggal, pakai str_split() atau mb_str_split().