Hàm strpos(), stripos(), strrpos(), strripos() trong PHP - Tìm vị trí của chuỗi con trong một chuỗi

Các hàm strpos(), stripos(), strrpos(), strripos() đều là những hàm trả về vị trí tìm thấy của chuỗi con trong một chuỗi. Nhưng mỗi hàm lại có một ưu điểm và cách sử rụng riêng. Và dưới đây mình sẽ giúp các bạn hiểu rõ hơn về cách hoạt động của từng hàm và sử dụng nó thế nào cho hợp lý với yêu cầu sử lý của bạn.

Hàm strpos() trả về giá trị là vị trí của chuỗi con trong một chuỗi (nếu tìm thấy hàm sẽ trả về vị trí tìm thấy chuỗi con và trả về giá trị false nếu không tìm thấy. Trong trường hợp chuỗi con xuất hiện nhiều lần trong chuỗi hàm sẽ trả về giá trị là vị trí đầu tiên tìm thấy (Có phân biệt kí tự HOA hoặc thường). Bạn cũng có thể chỉ định cho nó bắt đầu tìm kiếm từ vị trí nào

Cú pháp:
strpos(string $str, string $substr, [int $num]);
Trong đó:
 - $str là chuỗi mẹ cho trước
 - $substr là chuỗi con cần tìm vị trí trong $str.
 - $num là vị trí bắt đầu tìm chuỗi con từ đó. VD: $num =7 thì hàm bắt đầu tìm kiếm trong khoảng từ vị trí thứ 7 (đếm từ đầu chuỗi) đến cuối chuỗi

Ví dụ 1:
echo strpos('Tu hoc PHP don gian den PHP nang cao','PHP');
hoặc
 echo strpos('Tu hoc PHP don gian den PHP nang cao','PHP', 0);
Hoạt động của 2 ví dụ trên là tương đương nhau, và kết quả đều là: 7
(Chú ý: nếu ta không điền vị trí bắt đầu tìm kiếm hoặc đặt là 0 sẽ giống nhau, khi đó nó sẽ tìm từ đầu chuỗi đến cuối chuỗi)

Ví dụ 2:
echo strpos('Tu hoc PHP don gian den PHP nang cao','PHP', 7);

Kết quả là: 24

Hàm stripos() về cơ bản là giống hàm strpos(). Nhưng khác ở chỗ là hàm stripos() không phân biệt kí tự HOA hay thường.

Cú pháp:
stripos(string $str, string $substr, [int $num]);
Trong đó:
 - $str là chuỗi mẹ cho trước.
 - $substr là chuỗi con cần tìm vị trí trong chuỗi $str.
 - $num là vị trí được chỉ định để bắt đầu tìm kiếm từ đó.

Ví dụ 3:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = 'php';
echo stripos($str, $substr);
Kết quả: 7

Ví dụ 4:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = 'pHp';

echo stripos($str, $substr, 11);
Kết quả: 24
Chú ý trong ví dụ 3 và ví dụ 4 này thì $substr = 'pHp' hay $substr = 'PHp'... thì đều tương tự nhau

Hàm strrpos() trả về vị trí xuất hiện cuối cùng của chuỗi con. Về cơ bản hoạt động giống hàm strpos() nhưng trong trường hợp chuỗi con xuất hiện nhiều lần thì nó sẽ trả về vị trí cuối cùng tìm thấy. (Có phân biệt kí tự HOA hay thường).

Cú pháp:
strrpos(string $str, string $substr, [int $num]);
Trong đó:
 - $str là chuỗi mẹ cho trước.
 - $substr là chuỗi con cần tìm vị trí trong chuỗi $str.
 - $num là vị trí được chỉ định để bắt đầu tìm kiếm từ đó. $num có cả giá trị âm và dương.
    + Là giá trị dương sẽ tính như bình thường từ đầu chuỗi. VD: $num = 7 thì hàm sẽ bắt đầu tìm kiếm trong khoảng từ vị trí thứ 7 (tính từ đầu chuỗi) đến cuối chuỗi.
    + Ngược lại là giá trị âm sẽ tính giá trị đó từ cuối chuỗi. VD: $num = -5 thì hàm sẽ tìm kiếm trong khoảng từ đầu chuỗi đến vị trí thứ 5 đếm từ cuối chuỗi.

Ví dụ 6:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = '
PHP';
echo strrpos($str, $substr);
Kết quả: 24

Ví dụ 7:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = 'PHP';

echo strrpos($str, $substr, 10);
Kết quả: 24

Ví dụ 8:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = '
PHP';
echo strrpos($str, $substr, -15);
Kết quả: 7

Hàm strripos() về cơ bản hoạt động giống hàm strrpos nhưng không phân biệt kí tự HOA hay thường.

Ví dụ 9:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = '
php';
echo strripos($str, $substr);
Kết quả: 24

Ví dụ 10:
$str = 'Tu hoc PHP don gian den PHP nang cao';
$substr = '
phP';
echo strripos($str, $substr, -15);
Kết quả: 7

Chú ý: khi sử dụng các hàm này để so sánh nên dùng so sánh tuyệt đối (===, !==), vì trong một vài trường hợp nó sẽ không chạy theo ý bạn. Ví dụ dưới đây sẽ giúp bạn hiểu hơn về điều này.
$str = 'agoHAdgoajdasEAgae';
$substr = 'a';
if(strpos($str, $substr)==false) echo 'Khong tim thay "'.$substr.'" trong chuoi "'.$str.'"';
else echo 'Tim thay "'.$substr.'" o vi tri thu '.strpos($str, $substr).' trong chuoi "'.$str.'"';
Kết quả sẽ  là: Khong tim thay "a" trong chuoi "agoHAdgoajdasEAgae"
Rõ ràng là sai vì a xuất hiện mấy lần trong chuỗi.
Lý do là hàm đã tìm thấy "a" ở vị trí số  và trả về giá trị là 0. Mà trong PHP 0=false (0 đồng nghĩa với false), vậy khi bạn so sánh điều kiên strpos($str, $substr)==false hàm if sẽ trả về giá trị là đúng (true). Trong trường hợp này bạn phải so sánh tuyệt đối như sau:
$str = 'agoHAdgoajdasEAgae';
$substr = 'a';
if(strpos($str, $substr)===false) echo 'Khong tim thay "'.$substr.'" trong chuoi "'.$str.'"';
else echo 'Tim thay "'.$substr.'" o vi tri thu '.strpos($str, $substr).' trong chuoi "'.$str.'"';
Kết quả sẽ là: Tim thay "a" o vi tri thu 0 trong chuoi "agoHAdgoajdasEAgae"

Các bạn hãy thay các thông số trong từng ví dụ để hiểu rõ hơn về từng hàm nhé.

1 nhận xét: