Minggu, 15 November 2015

Dalam pemrosesan string, kadang kita butuh untuk mencari posisi sebuah karakter di dalam string. Untuk keperluan ini PHP memiliki fungsi bawaan, yakni strpos(). Kali ini saya akan membahas pengertian fungsi strpos() dan cara penggunaan fungsi strpos() di dalam PHP. Selain itu kita juga membahas fungsi stripos().

- Pengertian Fungsi strpos() -

Fungsi strpos() adalah fungsi bawaan PHP yang bisa digunakan untuk mencari posisi sebuah karakter atau sebuah string di dalam string lainnya. Hasil akhir fungsi ini adalah angka yang menunjukkan posisi karakter/string yang ingin dicari.
Berikut format dasar penulisan fungsi strpos() di dalam PHP:
mixed strpos (string $haystack , mixed $needle [, int $offset = 0 ] )
  1. Hasil akhir fungsi strpos adalah mixed, karena bisa berupa angka (posisi ditemukannya karakter yang ingin dicari), maupun FALSE jika fungsi ini tidak menemukan nilai apa-apa.
  2. Argumen pertama ($haystack) berupa string asal dimana pencarian akan dilakukan. String ini bisa terdiri dari sebuah kalimat pendek hingga dokumen string panjang yang terdiri dari ribuan huruf.
  3. Argumen kedua ($needle) diisi dengan karakter yang akan dicari. Karakter disini bisa berupa sebuah huruf/angka atau string lain seperti kalimat.
  4. Argumen ketiga ($offset) bersifat opsional, digunakan untuk ‘melompati’ hasil pencarian dari posisi tertentu. Ini digunakan untuk mengabaikan beberapa kalimat awal pencarian.
Agar lebih mudah dipahami, langsung saja kita membahas contoh penggunaannya:
<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"e");
echo $posisi;
// 1
?>


Hasil angka 1 dari kode program diatas menunjukkan karakter ‘e’ pertama dalam string $kalimat. Perlu diingat bahwa di dalam PHP penomoran index string dimulai dari angka 0. Sehingga posisi 1 diatas sebenarnya berada pada karakter ke-2.
Selain menggunakan 1 karakter, kita juga bisa mencari sebuah kata atau string lain, seperti contoh berikut:
<?php
$kalimat="Sedang serius belajar PHP";
$cari="serius";
$posisi=strpos($kalimat,$cari);
echo $posisi;
// 7
?>
Dalam kode program diatas, saya menempatkan string “serius” di dalam sebuah variabel, dan mencari posisinya dengan fungsi strpos(). Hasilnya, kata “serius” di temukan dan berada pada index ke-7.
Bagaimana jika di dalam string tidak ditemukan apa-apa? Mari kita coba:

<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"CSS",9);
var_dump($posisi);
// bool(false)
?>


Hasilnya: FALSE. Saya sengaja menggunakan fungsi var_dump() karena jika menggunakan echo, tidak akan terdapat tampilan apa-apa. Ini terjadi karena perintah echo mengkonversi boolean FALSE menjadi string kosong dan menampilkannya.
Hasil FALSE ini bisa kita manfaatkan untuk membuat sebuah kondisi pemeriksaan apakah karakter yang ingin dicari ada di dalam string, seperti contoh berikut:
<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"CSS");
if ($posisi){
echo "Ketemu";
}
else {
echo "Tidak ketemu";
}
// Tidak ketemu
?>


Dengan membuat kondisi seperti itu, kita bisa membuat kode program untuk menentukan ada tidaknya sebuah karakter. Akan tetapi, efek konversi tipe data otomatis dari PHP bisa menimbulkan masalah tersendiri. Perhatikan kode berikut ini:

<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"Sedang");
if ($posisi){
echo "Ketemu";
}
else {
echo "Tidak ketemu";
}
// Tidak ketemu
?>


Hasilnya adalah: “Tidak ketemu” ! Padahal seperti yang kita lihat di dalam string asal, kata “Sedang” ada di posisi pertama string. Apa yang terjadi?
Ini karena efek ‘type juggling’ dimana PHP akan menkonversi sebuah tipe data ke tipe data lain secara otomatis. Hasil dari fungsi strpos($kalimat,”Sedang”) adalah 0, karena kata “Sedang” ditemukan di awal string, dan indexnya adalah 0. Namun sewaktu kita menggunakan hasil ini dalam kondisi IF, nilai 0 akan dikonversi menjadi FALSE, sehingga hasilnya adalah: “Tidak ketemu”.
Agar kode program kita bebas dari masalah ini, bisa mengubah kondisi pemeriksaan IF menjadi seperti berikut ini:

<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"css");
if ($posisi !== FALSE){
echo "Ketemu";
}
else {
echo "Tidak ketemu";
}
// Ketemu
?>


Kali ini saya memaksa PHP untuk memeriksa apakah nilai variabel $posisi harus bertipe boolean FALSE. Kesalahan program seperti ini sering terjadi dan sangat susah untuk ditemukan, karena PHP tidak akan menampilkan pesan error apapun.
Kembali ke fungsi strpos(), kali ini saya akan mencoba menambahkan argumen ke-3:
<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"e",9);
echo $posisi;
// 15
?>


Argumen ketiga dari fungsi strpos() berfungsi untuk ‘melompati’ beberapa karakter awal. Dalam contoh diatas, karakter “e” yang ingin dicari sebenarnya sudah ditemukan pada index ke-1 dan ke-8. Namun karena saya menambahkan argumen ke-3 dengan nilai 9, maka proses pencarian baru dilakukan mulai dari index ke-9.

- Pengertian Fungsi stripos() -

Fungsi strpos() yang kita bahas disini bersifat case sensitif, yang berarti akan membedakan antara huruf besar dan huruf kecil. Sebagai contoh, kode program berikut akan menghasilkan nilai FALSE
<?php
$kalimat="Sedang serius belajar PHP";
$posisi=strpos($kalimat,"php",9);
var_dump($posisi);
// bool(false)
?>


Ini terjadi karena fungsi strpos() akan membedakan antara “php” dengan “PHP”. Kedua kata ini akan dianggap berbeda, sehingga karakter “php” tidak ditemukan.
Jika kita ingin untuk mengabaikan perbedaan ini, bisa menggunakan fungsi stripos(). Penambahan huruf ‘i’ disini menunjukkan bahwa fungsi stripos() bersifat case-insensitive. Yang berarti akan mengabaikan perbedaan huruf besar dan kecil. Fungsi stripos()juga mendukung argumen yang sama seperti fungsi strpos().
Berikut adalah hasil kode program diatas jika menggunakan fungsi stripos():

<?php
$kalimat="Sedang serius belajar PHP";
$posisi=stripos($kalimat,"php",9);
echo $posisi;
// 22
?>


Kali ini karakter ‘php’ ditemukan pada posisi index ke-22, dimana kata “PHP” berada.
Fungsi strpos() dan stripos() yang kita bahas disini sebenarnya cukup sederhana. Dalam prakteknya, fungsi ini biasa digabung dengan fungsi string lain, misalkan dengan fungsis ubstr_replace() untuk membuat program pencari kata atau menambahkan fitur find and replace.