Banyak data tiba dalam bentuk teks berseri: satu baris CSV, daftar tag dipisah koma, atau catatan kontak yang memisahkan nama, email, dan kota dengan tanda titik koma. Untuk mengolah data seperti itu, kita perlu dua gerakan yang saling berkebalikan: memecah string menjadi bagian-bagian, lalu menggabungkan bagian-bagian kembali menjadi string. Pada Chapter ini kita akan menguasai explode() dan implode() sebagai pasangan utama, mengenal str_split() dan chunk_split() untuk pemotongan berukuran tetap, dan mengintip preg_split() untuk pemisah yang berubah-ubah.

Memecah String menjadi Array dengan explode #

explode() menerima sebuah pemisah (separator) lalu memecah string menjadi array bagian-bagian di antara kemunculan pemisah tersebut:

php
<?php
$daftarNama = "Budi,Siti,Ani";
$nama = explode(",", $daftarNama);

print_r($nama);

Output yang Dihasilkan:

text
Array
(
    [0] => Budi
    [1] => Siti
    [2] => Ani
)

Hasil pemecahan adalah array — kumpulan nilai bernomor urut yang akan kita bahas tuntas pada Section Arrays dan Collections. Fungsi print_r() menampilkan isinya untuk inspeksi: tiga elemen dengan indeks 0, 1, dan 2, dan tiap elemen diakses dengan notasi kurung siku seperti $nama[0]. Perhatikan bahwa pemisahnya lenyap dari hasil; hanya isi di antara pemisah yang tersisa.

Dua perilaku explode() yang perlu diingat: bila pemisah tidak ditemukan sama sekali, hasilnya array satu elemen berisi string utuh; dan bila dua pemisah berdempetan — misalnya "a,,b" — elemen kosong tetap dihasilkan di posisinya. Kedua kasus ini sering menjadi sumber kejutan saat memproses data nyata yang tidak rapi.

Mengatur Jumlah Bagian dengan Parameter limit #

Parameter ketiga explode() yang opsional membatasi jumlah bagian. Nilai positif menentukan jumlah elemen maksimum: bagian yang melebihi batas tidak dipecah lagi, melainkan dibiarkan utuh di elemen terakhir.

php
<?php
$baris = "Budi Santoso;[email protected];Jakarta";

$bagian = explode(";", $baris, 2);

echo $bagian[0] . "\n";
echo $bagian[1] . "\n";

Output yang Dihasilkan:

text
Budi Santoso
[email protected];Jakarta

Dengan limit bernilai 2, pemecahan berhenti setelah dua elemen: $bagian[0] berisi "Budi Santoso", sedangkan sisa string "[email protected];Jakarta" — pemisahnya ikut — tetap utuh di $bagian[1]. Pola ini pas ketika hanya elemen pertama yang penting dipisah, misalnya memisahkan kunci dari sisa isi baris konfigurasi. Nilai negatif bekerja dari arah lain: elemen sebanyak itu dari kanan dibuang:

php
<?php
$tag = "php,belajar,string,baru";

print_r(explode(",", $tag, -1));

Output yang Dihasilkan:

text
Array
(
    [0] => php
    [1] => belajar
    [2] => string
)

limit -1 membuang satu elemen terakhir, sehingga "baru" lenyap dan tersisa tiga elemen. Secara umum, -n membuang n elemen dari kanan — cara cepat mengabaikan kolom yang tidak dipakai di baris data.

Separator Kosong Memicu ValueError #

Satu larangan tegas: pemisah tidak boleh string kosong. PHP 8 menolaknya dengan ValueError, bukan sekadar peringatan seperti pada PHP 7. Program berikut menangkap galat tersebut agar pesannya terlihat:

php
<?php
try {
    $hasil = explode("", "abc");
} catch (ValueError $e) {
    echo "Galat: " . $e->getMessage() . "\n";
}

Output yang Dihasilkan:

text
Galat: explode(): Argument #1 ($separator) must not be empty

Blok try/catch adalah mekanisme penangkapan galat yang akan dibahas tuntas pada Section Error Handling; untuk sekarang, bacanya sederhana — kode di dalam try dijalankan, dan bila melempar ValueError, blok catch yang menanganinya. Pesan galatnya jelas menyebut argumen pertama tidak boleh kosong. Ini masuk akal: pemisah kosong membuat aturan pemecahan menjadi ambigu — setiap posisi antar karakter bisa dianggap batas.

Menggabungkan Array menjadi String dengan implode #

implode() adalah kebalikan explode(): fungsi ini menerima sebuah perekat (glue) lalu menyambung semua elemen array menjadi satu string:

php
<?php
$buah = ["mangga", "jeruk", "pisang"];

echo implode(", ", $buah) . "\n";
echo implode("", $buah) . "\n";

Output yang Dihasilkan:

text
mangga, jeruk, pisang
manggajerukpisang

Perekat ", " disisipkan di antara elemen — tetapi tidak di awal dan tidak di akhir, sehingga hasilnya mangga, jeruk, pisang. Perekat kosong menyatukan elemen tanpa sambungan apa pun. Urutan argumen yang dianjurkan adalah perekat dahulu baru array, seperti pada contoh; PHP masih menerima urutan terbalik demi kompatibilitas lama, tetapi menulisnya secara konsisten membuat kode lebih mudah dibaca. Pasangan explode() dan implode() kerap dipakai bolak-balik dalam satu alur:

php
<?php
$daftar = "php,mysql,nginx";
$bagian = explode(",", $daftar);

echo implode(" -> ", $bagian) . "\n";

Output yang Dihasilkan:

text
php -> mysql -> nginx

String datang dengan pemisah koma, dipecah menjadi array, lalu digabung ulang dengan perekat panah — menghasilkan php -> mysql -> nginx. Di antara dua langkah tersebut, array dapat disaring, diurutkan, atau diubah elemen per elemen sebelum akhirnya dirangkai kembali.

Memotong per Kelompok dengan str_split dan chunk_split #

Dua fungsi lain memotong string tanpa peduli isi, hanya ukuran. str_split() memecah string menjadi array potongan sepanjang jumlah karakter tertentu — defaultnya satu:

php
<?php
$kode = "ADFRE13";

print_r(str_split($kode, 3));

Output yang Dihasilkan:

text
Array
(
    [0] => ADF
    [1] => RE1
    [2] => 3
)

String tujuh karakter terbagi menjadi potongan ADF, RE1, dan 3 — potongan terakhir boleh lebih pendek karena sisa yang tersisa tidak sampai tiga. Saudaranya chunk_split() tetap bekerja pada string: menyisipkan pemisah setiap beberapa karakter, termasuk di ujung akhir:

php
<?php
$nomorKartu = "4242424242424242";
$terformat = rtrim(chunk_split($nomorKartu, 4, " "));

echo $terformat . "\n";

Output yang Dihasilkan:

text
4242 4242 4242 4242

chunk_split() menyisipkan spasi setiap empat digit, menghasilkan 4242 4242 4242 4242 dengan satu spasi menggantung di ujung — perilaku yang memang dirancang untuk format seperti quoted-printable email. Spasi ekor itu kita buang dengan rtrim() dari Chapter Trimming dan Padding , melengkapi pola “format lalu bersihkan”.

Pratinjau preg_split #

Semua fungsi di atas butuh pemisah yang tetap. Data nyata sering berantakan: koma kadang diganti spasi beruntun, atau keduanya sekaligus. preg_split() menerima pola regular expression sehingga satu pemanggilan sanggup menangani bermacam pemisah:

php
<?php
$keahlian = "php,   mysql   laravel";

print_r(preg_split("/[\s,]+/", $keahlian));

Output yang Dihasilkan:

text
Array
(
    [0] => php
    [1] => mysql
    [2] => laravel
)

Pola /[\s,]+/ berarti “satu atau lebih karakter spasi-atau-koma”. Koma diikuti tiga spasi, maupun tiga spasi telanjang di antara mysql dan laravel, semuanya diperlakukan sebagai satu pemisah sehingga hasilnya bersih tiga elemen tanpa string kosong. Aturan pola seperti ini adalah dunia tersendiri yang akan kita kuasai pada Chapter Regular Expressions.

Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh chapter ini dalam satu program utuh yang dapat langsung Anda jalankan.

Ringkasan #

explode() memecah string menjadi array pada pemisah tetap — dengan limit positif menahan sisa di elemen akhir dan limit negatif membuang elemen dari kanan — sementara pemisah kosong ditolak keras lewat ValueError. implode() menyatukan array kembali dengan perekat pilihan. str_split() dan chunk_split() memotong berdasarkan ukuran tetap, dengan mb_str_split() sebagai versi aman UTF-8, dan preg_split() menunggu di depan untuk pemisah berpola. Setelah string bisa dipecah dan dirangkai, satu kebutuhan terakhir menyempurnakan olah teks kita: menyusun keluaran yang terformat rapi — misi dari Chapter String Formatting.

Referensi #

Berkas Sumber

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

contoh.php

Unduh berkas
php
<?php

// Memecah dan menggabungkan string

$kontak = "Budi Santoso;[email protected];Jakarta;28";
$bagian = explode(";", $kontak);

echo "Nama : " . $bagian[0] . "\n";
echo "Email: " . $bagian[1] . "\n";
echo "Kota : " . $bagian[2] . "\n";
echo "Umur : " . $bagian[3] . " tahun\n";

$hobi = ["membaca", "bersepeda", "memasak"];
echo "Hobi : " . implode(", ", $hobi) . "\n";

$nomorKartu = "4242424242424242";
echo "Kartu: " . rtrim(chunk_split($nomorKartu, 4, " ")) . "\n";