str_contains($haystack, $needle) mengembalikan true kalau $needle muncul di bagian mana pun dari $haystack, dan false kalau tidak. Fungsi ini ditambahkan di PHP 8.0 dan peka huruf besar kecil.
Berbeda dengan strpos(), fungsi ini mengembalikan boolean sungguhan, jadi tidak ada jebakan "ditemukan di posisi 0 terlihat seperti false".
Sintaks
str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool
Ketiganya ditambahkan di PHP 8.0 dan bekerja byte demi byte, jadi semuanya menangani teks Jepang dan teks UTF-8 lain dengan benar tanpa perlu versi mb_.
Memeriksa awal atau akhir string dengan str_starts_with dan str_ends_with
Contains yang tidak peka huruf besar kecil
Tidak ada fungsi str_icontains(). Ubah dulu kedua string menjadi huruf kecil. mb_strtolower() juga mengubah huruf di luar ASCII, seperti É atau huruf Sirilik, yang tidak disentuh oleh strtolower().
Needle kosong mengembalikan true
Needle kosong ditemukan di setiap string, termasuk string kosong. Ini penting kalau needle berasal dari kotak pencarian yang dibiarkan kosong oleh pengguna.
Memeriksa apakah string mengandung salah satu atau semua dari beberapa kata
str_contains() hanya menerima satu needle. Telusuri array berisi needle-needle: kembalikan hasil begitu ada satu yang cocok untuk "salah satu", atau begitu ada satu yang gagal untuk "semua".
Untuk memeriksa apakah sebuah nilai adalah salah satu elemen array, dan bukan substring dari sebuah string, pakai in_array().
Sebelum PHP 8: strpos !== false
Kode yang harus berjalan di PHP 7 memakai strpos() dengan perbandingan ketat. Hasilnya sama dengan str_contains(), kecuali untuk needle kosong: strpos() di PHP 7 mencetak Warning: strpos(): Empty needle dan mengembalikan false.
Baris terakhir mencetak bool(false) padahal teksnya ada, karena php berada di posisi 0. Mengganti pemeriksaan seperti ini dengan str_contains() adalah salah satu upgrade PHP 8 yang paling mudah.
Pertanyaan yang sering diajukan
Bagaimana cara memeriksa apakah sebuah string mengandung kata tertentu di PHP?
Di PHP 8, pakai str_contains($haystack, $needle), yang mengembalikan true atau false: str_contains('Hello world', 'world') bernilai true. Di PHP 7, pakai strpos($haystack, $needle) !== false.
Apakah str_contains peka huruf besar dan kecil?
Ya. Untuk pemeriksaan yang tidak peka huruf besar kecil, ubah kedua sisi menjadi huruf kecil: str_contains(mb_strtolower($haystack), mb_strtolower($needle)), atau pakai stripos($haystack, $needle) !== false.
Kenapa str_contains mengembalikan true untuk string kosong?
Setiap string mengandung string kosong, jadi str_contains('abc', '') mengembalikan true. Kalau needle berasal dari input pengguna, periksa dulu bahwa nilainya tidak kosong.
Bagaimana cara memeriksa apakah string diawali atau diakhiri dengan sesuatu di PHP?
Pakai str_starts_with($s, 'http') dan str_ends_with($s, '.pdf'), yang keduanya ditambahkan di PHP 8.0. Seperti str_contains(), keduanya peka huruf besar kecil dan mengembalikan bool.