عکس پیش‌فرض نوشته

در هنگام برنامه نویسی اسکریپت ها به زبان PHP ممکن هست بخواهید کلمه ای را درون یک رشته متنی (String) جستجو کنید.

برای مثال، شاید در حال برنامه نویسی یک موتور جستجو باشید، در این حالت نیاز دارید تا درون متون هر صفحه به دنبال کلمات مورد نظر خود بگردید؛ یا در هنگام ثبت نام کاربران، ایمیل آنها را بررسی کنید که آیا شامل یک دامنه خاص یا کلمات خاص هست یا نه.

در زبان PHP توابعی کاربردی برای جستجو در یک String تعریف شده اند که در این مقاله به بررسی و آموزش استفاده از آنها خواهیم پرداخت.

جستجو در رشته با php

 

اولین تابع، تابع strstr() است که دو مقدار ورودی دریافت میکند؛ مقدار اول رشته ای است که جستجو در آن انجام میشود و پارامتر دوم عبارت مورد نظر ما برای جستجو.

در صورتی که عبارت مورد نظر ما در متن داده شده وجود داشته باشد، از ابتدای عبارتی که با عبارت مورد نظر ما همخوانی داشته تا پایان رشته را به ما باز میگرداند.

$string = "Hello dear Users, Welcome to SabzElco website!";

echo strstr($string, "User"); //Show: “Users, Welcome to SabzElco website!”

 

در صورتی که عبارت مورد جستجوی ما پیدا نشود، تابع strstr مقدار false را به عنوان خروجی بازمیگرداند. در نتیجه میتوان از این تابع به صورت شرطی نیز استفاده کرد.

$string = "Hello dear Users, Welcome to SabzElco website!";

if (strstr($string, "welcome")){
    echo "Found!";
}else{
    echo "Not Found!";
}

 

خروجی قطعه کد بالا به صورت Not Found! خواهد بود.

همانطور که در کد بالا نیز مشاهده میکنید، تابع strstr به حروف کوچک و بزرگ حساس و یا به عبارتی case sensitive است؛ اگر میخواهید این حساسیت را از بین ببرید میتوانید از تابع stristr() که دقیقا مشابه همین تابع هست استفاده کنید.

 

تابع دوم برای جستجو در متن، تابع strpos() است. این تابع همانند تابع strstr() دو ورودی میگیرد؛ ورودی اول متن ما برای جستجوی در آن و ورودی دوم عبارت مورد نظر ما برای جستجو.

خروجی تابع strpos در صورت وجود داشتن عبارت مورد نظر، ایندکس اولین حرف از عبارت پیدا شده خواهد بود. در صورتی که عبارت پیدا نشود، false بازگردانده میشود.

$string = "Hello dear Users, Welcome to SabzElco website!";

echo strpos($string, "User"); // display: 11

 

همانطور که میبینید، کلمه User از کاراکتر دوازدهم متن داده شده شروع میشود و تابع برای ما عدد 11 را بازگردانده است. دقت کنید که ایندکس گذاری کاراکترها در یک رشته متنی از 0 شروع میشود نه از 1!

به همین دلیل اگر همانند تابع قبلی از نتیجه این جستجو در عبارات شرطی استفاده کنیم، در بعضی موارد نتیجه اشتباه خواهد بود.

فرض کنید که در String فوق، کلمه Hello جستجو شود؛ نیتجه جستجو 0 خواهد بود، یعنی ایندکس اول رشته متنی داده شده، ولی در زبان php مقدار 0 برابر با false در نظر گرفته شده و نتیجه شرط اجرا شده اشتباه میشود.

برای رفع این مشکل میتوان از عملوند === یا !== استفاده کرد.

if ( strpos( $string, 'Hello' ) !== false ) {
    echo "Found!";
} else {
    echo "Not Found!";
}

 

تابع strops پارامتر سومی هم میگیرد؛ این پارامتر به صورت عددی بوده و مشخص میکند که جستجو از ایندکس چندم متن داده شده انجام شود. این پارامتر به طور پیشفرض 0 است، یعنی جستجو از ابتدای متن داده شده انجام میشود.

$string = "Hello dear Users, Welcome to SabzElco website!";

echo strpos($string, "e"); //display: 1
echo strpos($string, "e",2); //display: 7
echo strpos($string, "e",3); //display: 7
echo strpos($string, "e",8); //display: 13

 

تابعی مشابه به نام strrpos() وجود دارد که جستجوی کلمات داده شده را از آخر رشته متنی به اول انجام میدهد.

دو تابع strpos و strrpos حساس به حروف کوچک و بزرگ هستند، برای غیر حساس بودن نسبت به حروف، میتوان از توابع stripos و strripos استفاده کرد.

 

تابع دیگری در php به اسم substr_count() وجود دارد که تعداد تکرار عبارتی را در متن داده شده بررسی کرده و باز میگرداند.

$string = "Hello dear Users, Welcome to SabzElco website!";

echo substr_count($string, "s"); //display: 3

 

این تابع دو پارامتر ورودی دیگر هم به دلخواه میگیرد؛ پارامتر سوم ورودی، یک مقدار عددی است که مشخص میکند جستجو از کدام ایندکس متن داده شده شروع شود و پارامتر چهارم که به صورت عددی است مشخص میکند طول عبارت مورد جستجو از ایندکس داده شده چقدر باشد.

 

در این مقاله سعی شد نحوه جستجوی یک عبارت در عبارت دیگر از نوع رشته متنی در زبان برنامه نویسی PHP مورد بررسی قرار گیرد و به طور کلی 4 تابع آماده زبان PHP توضیح داده شد.