جستجوی کلمه یا متن در رشته یا string در php

تاریخ: 28 تیر 1399

گاهی اوقات لازم داریم تا چک کنیم آیا یک کلمه یا متن درون رشته وجود دارد یا خیر.

تابع strpos به ما کمک می کند تا اگر رشته ما موجود بود، ایندکس حرف اول آن را داشته باشیم و اگر نبود مقدار false را به ما بر میگرداند.


strpos($string, $text, $offset);

 

پارامتر اول همان رشته ما می باشد که قرار است در آن جستجو نماییم.

پارامتر دوم متنی هست که قرار است جستجو شود.

و پارامتر سوم عددی است که جستجو از آنجا شروع می شود. این عدد همان ایندکس رشته ما می باشد. در حالت پیشفرض جستجو از ابتدا آغاز می شود یعنی مقدار دیفالت پارامتر سوم تابع، 0 می باشد.

 

$x = 'Hello To All Of World';
 
echo strpos($x, 'Ald'); //output:
 
if( strpos($x, 'All') !== false ) //true
{
echo 'is exist';
}

//note: 0 == false == null

 

زمانی که offset تابع را منفی دهیم. ایندکس شروع کننده جستجو از آخر محاسبه می شود:


$x = 'Hello To All Of World';

echo strpos($x, 'l', -1); //output:

echo strpos($x, 'l', -2); //output: 19

 

نکته مهم: چون این تابع در صورت وجود نداشتن متن در رشته، مقدار صفر را بر می گرداند و از طرفی مقدار صفر برابر ایندکس اولین حرف رشته ما می باشد (این دو صفر از نظر مقداری برابرند ولی از نظر نوع مخالف اند چون اولی از نوع منطقی و دومی از نوع عدد است)، لذا در شرط ها به جای صفر از false استفاده می کنیم: (یا از صفر استفاده کنیم ولی عملگر ما عملگر ===! باشد. یعنی از نظر مقدار و نوع چک کند)


$x = 'Hello to all of world';
    
if (strpos($x, 'Hello') !== false)
{
    echo 'hello';
}

 

تابع strpos یک تابع جامعی نمی باشد. چون حروف یونیکد شده مانند utf8 را ساپورت نمی کند. روش بهتر استفاده از تابع mb_strpos می باشد:


$x = 'سلام';

echo strpos($x, 'ل'); //output: 2 is wrong

echo mb_strpos($x, 'ل'); //output: 1 is true

 

دیدگاهتان را بنویسید

طراحی افزونه وردپرس