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 ] )
- 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.
- 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.
- Argumen kedua ($needle) diisi dengan karakter yang akan dicari. Karakter disini bisa berupa sebuah huruf/angka atau string lain seperti kalimat.
- 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 di duniailkom"; $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 di duniailkom"; $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 di duniailkom"; $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 di duniailkom"; $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 di duniailkom"; $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 di duniailkom"; $posisi=strpos($kalimat,"Sedang"); 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 di duniailkom"; $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 di duniailkom"; $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 di duniailkom"; $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 fungsi substr_replace() untuk membuat program pencari kata atau menambahkan fitur find and replace.
Lengkap dan Gratis …..
Lebih lengkap dari apa yang ada di gramedia
Terima kasih banyak DuniaIlkom bisa belajar cuma2
Sama2, terimakasih juga untuk kunjungannya… semoga tutorial di duniailkom ini bisa bermanfaat :)
kalau menemukan posisi karakter pertama yg berbeda diantara dua buah string menggunakan rumus apa gan ???
Untuk membuat itu kayaknya harus buat manual gan.
Mungkin bisa dengan melakukan perulangan untuk setiap huruf dari kalimat pertama (bisa diambil dengan fungsi substr), lalu dibandingkan dengan huruf pertama kalimat kedua. Lumayan rumit sepertinya, hehe…
Buatlah script PHP, untuk menemukan posisi karakter pertama yg berbeda diantara dua buah string.
string1 : 'pelajar'
string2 : 'pelarian'
Hasil yg diharapkan : perbedaan pertama diantara kedua string, dimulai pada posisi 5: "j" vs "r"
kalau seperti ini caranya gimana gan ??????????
menggunakan rumus apa ????????
Ini ga ada rumusnya gan, kemampuan programming dan logika agan lah yang pengen diuji :)
Kalau ini adalah tugas sekolah/kuliah saya sangat anjurkan untuk mencoba membuatnya sendiri. Karena kalau tidak bisa berarti agan perlu belajar lagi tentang algoritma pemrograman.
Untuk kali ini saya bantu ya, mengenai penjelasan kode programnya silahkan agan pelajari sendiri, karena lumayan panjang. Atau bisa coba order buku PHP Uncover yang saya buat untuk penjelasan tentang fungsi2 PHPnya:
<?php
$string1 = "pelajar";
$string2 = "pelarian";
// cari panjang string1
$panjang = strlen($string1);
// defenisikan posisi beda
$posisi_beda=-1;
// perulangan untuk mencari posisi
for ($i=1;$i<$panjang;$i++) {
// ambil 1 karakter dari setiap string
$karakter_string1 = substr($string1,$i,1);
$karakter_string2 = substr($string2,$i,1);
// cek apakah karakter sama
if ($karakter_string1 != $karakter_string2)
{
$posisi_beda=$i;
break;
}
}
// karena index string PHP mulai dari 0, maka tambahkan 1
$posisi_beda = $posisi_beda+1;
echo "Perbedaan pertama diantara kedua string, dimulai pada posisi
$posisi_beda : $karakter_string1 vs $karakter_string2";
?>
Syaratnya panjang $string1 dan $string2 harus sama. Semoga bermanfaat :)
makasih gan???
ini bukan tugas sekolah ataupun kuliah, melainkan cuma p
latihan php awal aja :D
makasih :D
Siip, lanjut gan…
selamat sore gan, mau tanya nih..
bisa gak kita menampilkan data yang kita?
MISAL:
$data = "ABCDF$123#GHIJK"
Yang mau ditampilkan hanya huruf 123 saja, gmna gan?
Maksudnya ingin memotong string y gan? bisa menggunakan fungsi substr() bawaan PHP. Lengkapnya lanjut kesini: https://www.duniailkom.com/tutorial-php-cara-memotong-atau-mengambil-sebagian-string-fungsi-substr/
Ok.. thx ya.. (y).. GBU
$dataArray = ('berangkat','aku','sekolah','belajar','istirahat','kuliah') //database
input : aku berangkat skolah
bantuin donk mastah
gimana cara nya cocokin satu persatu yang di input sama yg ada di database
klo nggak sama ditandai bold…
misal skolah kan harus sekolah
Wah sudah cukup rumit tuh gan, kita harus menyiapkan database juga untuk kata2 yang "error", seperti skloah, sekolh, skolah dll. Ini mah bisa jadi skripsi, dan buatnya juga g sebentar.
Gan, kalau fungsi ini (diatas):
if ($posisi !== FALSE)
Jawabannya bener2 False atau nggak ada apakah akan keluar nilai True?
gan tolong bikinin tutorial grabbing dong :)
Di tampung dulu y gan, content grabbing termasuk pembahasan advanced, dan bisa beda2 tiap situs yang pengen di grabbing. Apa yang bisa bekerja untuk situs kompas, tentu beda untuk situr detik.
Selain itu, kita harus minta izin dulu kepada yang punya situs. Kan sama artinya dengan "mencuri" tulisan dari web tersebut…
<?php
$kalimat="Sedang serius belajar PHP di duniailkom";
$posisi=strpos($kalimat,"css");
if ($posisi !== FALSE){
echo "Ketemu";
}
else {
echo "Tidak ketemu";
}
// Ketemu
?>
Komentar //Ketemu harusnya //Tidak ketemu gan
Soalnya needlenya di baris ke-3 adalah "css"
padahal tidak ada kata css di baris ke-2
Terimakasih koreksinya gan… Betul, seharusnya hasilnya "Tidak ketemu", karena string "css "memang tidak ada di $kalimat.
Saya salah di kode programnya nih, seharusnya yang saya maksud: $posisi=strpos($kalimat,"Sedang"), bukan $posisi=strpos($kalimat,"css"), Agar penjelasannya bisa bersambung.
Segera di perbaiki :)
Misal kalo saya mau cari "Jumlah angka 1 dari hitungan 1 sampai 100" gimana yah? Yang selalu keluar pasti angka 1 terus. Mungkin bisa kasih pencerahan teknik atau logikanya gan seperti apa?
Thanks
Saya mau beli buku php nya masi ada kah?
Siap, buku PHP Uncover tersedia mas… Jika berminat, saya sudah kirim cara pemesanannya via email. Silahkan di cek emailnya, terimakasih :)
Pak mau tanya, kalau ada soalnya gini bagaiamana?
tidak boleh pakai function strpos , stripos dll…
Buatlah function pencarian string index needle pada haystack
$haystack berupa kumpulan string
$needle adalah string yang akan dicari didalam $haystack
Contoh output:
$haystack = 'santiniluwansa lestari';
$needle = 'sa' | 'a' | 'x'
$output = array(0,12) | array(1,10,13,19) | array()
Catatan: tidak menggunakan native function strpos dan turunannya
Hint: anda bisa menggunakan https://sandbox.onlinephpfunctions.com/
atau http://phptester.net/ untuk mencoba script yang anda buat
Kalau tidak boleh pakai fungsi bawaan PHP, maka harus ditelusuri menggunakan index array.
Idenya bisa buat perulangan untuk memeriksa apakah setiap huruf di $haystack sama dengan $needle, misalnya apakah $haystack[0] sama dengan $needle[0], dst.