Menu

PHP substr(): Cara Mengambil Sebagian Teks dari String

substr($string, $offset, $length) mengembalikan sebagian dari sebuah string. Pelajari offset negatif, cara mengambil karakter pertama atau terakhir, mb_substr untuk teks Jepang dan teks UTF-8 lainnya, substr_count, dan cara memotong teks dengan elipsis.

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

substr($string, $offset, $length) mengembalikan bagian dari $string yang dimulai di posisi $offset (dihitung dari 0) dan panjangnya $length karakter. substr('Hello world', 0, 5) mengembalikan "Hello". Kalau $length tidak ditulis, kamu mendapat semuanya sampai akhir.

substr() menghitung byte. Untuk teks bahasa Inggris, byte sama dengan karakter, tetapi tidak untuk teks Jepang, Tionghoa, emoji, atau huruf beraksen. Untuk itu, pakai mb_substr(), yang dibahas di bawah.

Sintaks

substr(string $string, int $offset, ?int $length = null): string
  • $offset adalah posisi awal. 0 adalah karakter pertama. Nilai negatif dihitung dari akhir.
  • $length adalah jumlah byte yang diambil (satu byte sama dengan satu karakter di teks ASCII biasa). Nilai negatif membuang sejumlah itu dari akhir. null (atau tidak ditulis) berarti "sampai akhir".

Offset dan length negatif: bekerja dari akhir

$offset negatif mulai menghitung dari akhir string, jadi -1 adalah karakter terakhir. $length negatif berhenti sejumlah karakter itu sebelum akhir.

substr($s, 0, -1) adalah cara yang biasa dipakai untuk menghapus karakter terakhir, misalnya koma di akhir yang tersisa dari sebuah loop.

Mengambil karakter pertama atau terakhir

Untuk satu byte, kamu juga bisa langsung mengakses string dengan index. $s[0] adalah karakter pertama, dan sejak PHP 7.1, $s[-1] adalah karakter terakhir.

Mengakses index pada posisi yang tidak ada akan mencetak warning, sedangkan substr() hanya mengembalikan string kosong. Kalau string-nya mungkin kosong, lebih baik pakai substr().

Di luar jangkauan: string kosong, bukan false

Kalau $offset melewati akhir string, substr() mengembalikan "" di PHP 8. Di PHP 7, fungsi ini mengembalikan false, jadi kode lama yang memeriksa === false tidak lagi bekerja.

Teks Jepang: pakai mb_substr

UTF-8 menyimpan kana dan kanji umum masing-masing dalam 3 byte (kanji langka seperti 𠮷 dan emoji memakai 4). substr() menghitung byte, jadi substr('こんにちは', 0, 3) hanya mengembalikan こ, dan length yang tidak jatuh tepat di batas karakter akan memotong karakter menjadi dua dan menghasilkan teks yang rusak. mb_substr() menerima argumen yang sama dan menghitung karakter.

Hal yang sama berlaku untuk emoji dan huruf beraksen seperti é. Jumlah karakter dihitung dengan mb_strlen(); lihat strlen() untuk perbedaan byte dan karakter.

Memendekkan teks dengan elipsis

Memotong judul yang panjang untuk sebuah list atau card adalah pemakaian substr() yang paling umum di dunia nyata. Pakai mb_substr() supaya judul berbahasa Jepang tidak pernah terpotong di tengah karakter, dan tambahkan ... hanya kalau teksnya memang dipendekkan.

mb_strimwidth($text, 0, $width, '...') melakukan hal yang sama berdasarkan lebar tampilan, ketika satu karakter Jepang lebar penuh dihitung 2 kolom dan huruf Latin dihitung 1. Fungsi ini cocok untuk tata letak dengan lebar tetap.

Menghitung substring dengan substr_count

substr_count($haystack, $needle) mengembalikan berapa kali $needle muncul. Fungsi ini peka huruf besar kecil dan tidak menghitung kecocokan yang saling tumpang tindih.

substr dengan strpos: teks sebelum atau sesudah sebuah karakter

Gabungkan substr() dengan strpos() untuk memotong di karakter yang posisinya belum kamu ketahui sebelumnya, seperti @ di alamat email:

Periksa bahwa strpos() tidak mengembalikan false sebelum memakai hasilnya: kalau karakternya tidak ada, false dianggap 0 tanpa warning, sehingga substr('nobody', 0, $at) mengembalikan "" dan substr('nobody', $at + 1) mengembalikan "obody".

Pertanyaan yang sering diajukan

Bagaimana cara mengambil karakter terakhir dari string di PHP?

Pakai offset negatif: substr($s, -3) mengembalikan 3 karakter terakhir. Untuk teks yang mungkin berisi karakter Jepang atau karakter multibyte lain, pakai mb_substr($s, -3).

Apa bedanya substr dan mb_substr?

substr() menghitung byte dan mb_substr() menghitung karakter. Di UTF-8, kana dan kanji umum masing-masing memakai 3 byte, jadi substr('日本語', 0, 2) memotong sebuah karakter menjadi dua, sedangkan mb_substr('日本語', 0, 2) mengembalikan "日本".

Apa yang dikembalikan substr kalau posisi awalnya melewati akhir string?

String kosong. Sejak PHP 8.0, substr('abc', 5) mengembalikan ""; PHP 7 mengembalikan false.

Bagaimana cara menghapus karakter terakhir dari string di PHP?

substr($s, 0, -1) mengembalikan semuanya kecuali byte terakhir. Pakai mb_substr($s, 0, -1) untuk teks multibyte, atau rtrim($s, ',') kalau kamu hanya ingin menghapus karakter tertentu di akhir.

Bagaimana cara menghitung berapa kali sebuah substring muncul di PHP?

substr_count($haystack, $needle): substr_count('banana', 'an') mengembalikan 2. Fungsi ini peka huruf besar kecil dan tidak menghitung kecocokan yang saling tumpang tindih.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai