Menu

PHP explode(): Memecah String Menjadi Array

explode(',', $string) memecah string di setiap koma dan mengembalikan potongan-potongannya sebagai array. Pelajari parameter limit, memecah berdasarkan baris baru, memangkas spasi pada potongan, dan kapan str_split atau preg_split lebih cocok.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

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 0 diperlakukan sebagai 1.

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

FungsiMemecah diContohHasil
explode()string pemisah yang tetapexplode('-', '2026-03-14')['2026', '03', '14']
str_split()setiap N bytestr_split('abcdef', 2)['ab', 'cd', 'ef']
mb_str_split()setiap N karaktermb_str_split('日本語')['日', '本', '語']
preg_split()sebuah regular expressionpreg_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().

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai