زیررشته به زیربخشهای یک رشته اصلی گفته میشود. با توابع مختلفی که در اختیار داریم میتوانیم یک بخش از متن را جدا کرده، تعداد تکرار یک عبارت را جستجو کنیم یا تغییراتی روی رشتهها اعمال کنیم. در این آموزش با ۲ تابع پرکاربرد کار با زیررشته در PHP و ترفندهای آن آشنا میشویم.
فهرست محتوای آموزش
زیر رشته یا Sub String چیست ؟
زیررشته یک بخش کوچکتر از یک رشته یا string بزرگتر است. در همین ابتدا اگر با مفهوم رشته آشنایی ندارید، جلسه رشته متنی یا string در PHP را ببینید و سپس ادامه دهید. فرض کنید عبارت زیر را در اختیار داریم:
Welcome Dear Users!
از داخل رشته بالا، هر زیرمجموعهای را که استخراج کنیم میتواند یک زیررشته یا SubString باشد. مثلاً هر خط از باکس زیر یک زیررشته از رشته بالا محسوب میشود:
Welcome Dear Dear User ers! lcome D c
هر ترکیب ترتیبدار دیگری هم میتواند یک زیررشته محسوب شود.
ساخت زیر رشته از رشته در PHP
برای ایجاد یک زیررشته از رشته مورد نظرمان، میتوانیم از تابع substr در PHP استفاده کنیم. تابع substr()
برای استخراج بخشی از یک رشته متنی استفاده میشود.
ساختار کلی تابع substr
مشابه همه تابعها در PHP این تابع یکسری ورودی و یک خروجی دارد. وظیفهای انجام پردازشهایی روی رشته و دادن زیررشته نهایی بهعنوان خروجی است. این تابع یک ورودی میگیرد که دو تای اول اجباری و آرگومان سوم اختیاری است.
substr($STRING, $START, $LENGTH)
ورودیهای این تابع عبارتاند از:
- STRING همان رشته اصلی ماست که میخواهیم از آن یک زیررشته ایجاد کنیم. این پارامتر اجباری است و اندازهاش میتواند یک کاراکتر یا رشتهای طولانی باشد.
- START مشخصکننده ایندکس شروع زیر رشته است. یعنی مشخص میکنیم زیررشته نهایی از کجای رشته فعلی شروع شود.
- LENGTH مشخصکننده طول زیررشته موردنظرمان است. اگر این مقدار را مشخص کنیم، به این معنی است که تعیین کردهایم زیررشته نهایی که از اندیس START شروع شده تا چه اندازه (یا کجای رشتهٔ اصلی) ادامه خواهد داشت.
همانطور که میدانید شمارش اندیس رشته مانند آرایه در PHP از شماره 0 شروع و تا یکی کمتر از اندازه رشته ادامه مییابد. آرگومان دوم و سوم بهصورت یک عدد صحیح مشخص میشوند. اگر این عدد مثبت باشد، شمارش از ابتدای رشته آغاز میشود و اگر منفی باشد، از انتهای آن.
ایجاد زیررشته PHP
در قطعه کد زیر، یک زیررشته از اندیس 2 رشته اصلی ایجاد کردهام:
<?php
$str = "This is PHP Tutorial";
echo substr($str, 2); // "is is PHP Tutorial"
?>
چون پارامتر سوم تعریف نشده، زیررشته از اندیس 2 تا انتهای رشته ایجاد میشود.
در زیر، یک زیررشته با طول 7 با شروع از اندیس 8 ساخته میشود: (یعنی از ایندکس 8 تا 8+7-1)
<?php
echo substr($str, 8, 7); // "PHP Tut"
?>
اگر مقدار ورودی سوم منفی باشد، انتهای زیررشته کاراکتری با همان اندیس منفی در رشته اصلی است. به مثال زیر توجه کنید:
<?php
$str = "SabzDanesh PHP Tutorial"
echo substr($str, 4, -6); // "Danesh PHP Tut"
?>
آرگومان سوم میتواند صفر، False یا NULL باشد! در این صورت فقط یک رشته خالی تولید میشود!
<?php
echo substr($str, 2, FALSE); // ""
?>
در این مثالها، مقدار خروجی تابع را با دستور echo در خروجی چاپ کردهام. میتوانیم مشابه تعریف متغیر PHP آن را در یک متغیر قرار داده و بعداً از آن استفاده کنیم.
شمارش تعداد تکرار زیررشته در رشته با PHP
گاهی اوقات نیاز داریم تعداد تکرار یک زیررشته (کلمه یا عبارت) را درون کی متن بزرگتر بررسی کنیم. برای این کار، تابعی به نام substr_count()
داریم که تعداد زیررشتههای مورد نظر را میشمارد.
تابع شمارش زیررشته در PHP چهار ورودی میگیرد که دو تای اول آن اجباری و دو آرگومان دیگر اختیاری است:
substr_count($STRING, $SUBSTR, $START, $LEN)
- آرگومان اول (STRING) همان رشته اصلی است که میخواهیم تعداد تکرار زیررشته را در آن محاسبه کنیم.
- دومین ورودی (SUBSTR) زیررشته موردنظر ماست که میتواند یک کاراکتر، کلمه یا یک عبارت طولانیتر باشد.
- ورودی سوم (START) یک آرگومان اختیاری است. با تعریف این ورودی مشخص میکنیم که میخواهیم عملیات جستجو و شمارش از ایندکس مشخصی از رشته اصلی آغاز شود.
- آرگومان چهارم (LEN) یک ورودی اختیاری است که با تعریف ورودی سوم معنا پیدا میکند. با تعریف این ورودی مشخص میکنیم که عملیات جستجو از موقعیت START شروع و در موقعیت START + LEN پایان یابد.
توجه کنید که در صورتی که مجموع مقدار شروع و Len بیشتر از طول رشته اصلی شوم، با خطا یا هشدار مواجه میشود. برای مدیریت آن ایده مناسبی در آموزش مدیریت استثنا و خطا در PHP مطرح شده است.
استفاده از تابع substr_count
همانطور که احتمالاً حدس زدهاید، سه حالت مختلف برای صدا زدن این تابع با رشته و زیررشته مورد نظرمان وجود دارد. در این بخش این سه حالت را با یک مثال بررسی میکنم.
1- تعریف دو آرگومان اول: با تعریف رشته اصلی (String) و زیررشته (SubString)، تعداد تکرار زیررشته در تمام طول رشته اصلی شمارش و بهعنوان خروجی به ما داده میشود.
<?php
$str = "Welcome Dear Users! This is a test message.";
$substr = "es";
echo substr_count($str, $substr); // 2
?>
2- تعریف دو آرگومان اجباری و آرگومان سوم: در اینصورت ابتدا زیررشتهای با موقعیت داده شده (از start تا انتها) ایجاد شده و عملیات شمارش در زیررشته جدید انجام میشود.
به بیان سادهتر، ابتدا رشته اصلی به یک زیررشته PHP تبدیل میشود. سپس زیررشته جدید بهعنوان رشته اصلی در نظر گرفته شده و شمارش انجام میشود.
<?php
$str = "Welcome Dear Users! This is a test message.";
$substr = "is";
echo substr_count($str, $substr, 15); // 2
echo substr_count($str, $substr, 30); // 0
?>
در قطعه کد بالا، در دومین بار فراخوانی، چون زیررشتهی حاصل شده از رشته اصلی عبارت "test message"
است، مقدار "is"
هیچ بار در آن تکرار نشده است.
3- تعیین چهار آرگومان: در این حالت نیز، مشابه مورد قبلی، ابتدا زیررشتهای از رشته اصلی ایجاد میشود و عملیات شمارش روی آن انجام خواهد شد. با این تفاوت که زیررشته جدید از موقعیت START و به طول LEN است.
<?php
$str = "Welcome Dear Users! This is a test message.";
$substr = " "; // space STRING
echo substr_count($str, $substr); // 7
echo substr_count($str, $substr, 15); // 5
echo substr_count($str, $substr, 15, 8); // 1
?>
امیدوارم بهخوبی با توابع substr()
و substr_count()
برای ساخت زیررشته در PHP و شمارش تکرار کلمه در متن آشنا شده باشید. پیشنهاد میکنم همین الآن این توابع را در حالتهای مختلف روی چند رشته تمرین کنید.
در این آموزش مثالهای کوتاه اما مفیدی را بررسی کردم. اگر مایلید میتوانید در صفحه مستندات انگلیسی آن، نمونه کدهای بیشتری ببینید.
اگر سؤال یا نکتهای در این مورد دارید، بخش دیدگاهها برای شماست. 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام ادمین عزیز اولا که سروتونین اصلا تشنه نیس یا اینکه تعارف میکنه یا خودش نوشیدنی ذخیره میکنه و stateless نیس🙃 به هر حال
من خیلی با زبان php حال میکنم چون هم قدرتمنده و هم کاربردی همینطور به جاوا اسکریپت ولی خیلی مشتاقم که بدونم فرض کنیم وب سایتی هستش که یه قسمتش بازی توش برنامه نویسی شده و این بازی تابعی از اعداد تصادفی به کاربر نشون میده، و برنامه نوییسیش هم جاوا اسکریپت باشه میشه واسه سرور request فرستاد و تغییر توی این بازی ایجاد بشه از سمت سرور و یا سرور و به اشتباه انداخت با دستکاری کوکی ها؟
سلام :))))
شدنش که میشه. هم میتونید روی بازی (بخشهاییش که js و سمت مرورگره) تغییر اعمال کنید و هم با بررسی اینکه چطور کار میکنه درخواستهای خودتون رو بفرستید.
به عنوان یه توسعه دهنده در برنامههای اینطوری، معمولاً سمت سرور هم بررسیهایی انجام میدن که جلوی این کار گرفته بشه.
مثلاً قراره توی یه بازی شما هم یک ساعت مجاز باشید یکبار تاس بندازید. شاید با js بتونید زمان رو کاهش بدید یا حتی یه درخواست به سرور بدید که قراره بازی کنیم (در حالی که دکمه غیر فعاله). سمت سرور هم باید چک کنیم که آیا این کاربر مجاز هست الآن بازی کنه یا این درخواست داره غیرمتعارف ارسال میشه.
البته هستند سایتهایی که این پردازش رو انجام نمیدن و عملاً میشه گفت باگ دارند که میتونید ازش استفاده کنید.
سلام
دوستان کد مربوط به این دو سوالphp را می دانید؟
برنامه ای بنویسید که نام و نام خانوادگی شما را به عنوان یک پارامتر ورودی دریافت نماید سپس تعداد حروف آن را چاپ نماید.
برنامه ای بنویسید که در آن بدون استفاده از تابغ date تاریخ جاری را به صورت سال ماه و روز نمایش داد.
سلام
برای مورد اولی در آموزش رشته متنی در PHP تابع
strlen()
رو معرفی کردم که میتونید ازش برای شمارش کاراکترها استفاده کنید.برای سؤال دومتون شما چطور میخواید متوجه بشید که امروز چه روزی هست؟ ورودی خاصی دارید براش؟
سلام
ممنون از توجه شما.
من سعی کردم برای تاریخ یک ورودی به صورت ثابت بدم که فقط زمان را نشان دهد که مطمینا اشتباه می باشد.
شما باید ببینید نیازتون چیه و ورودی مورد نظری که میخواید به چه صورت هست. مثلا موقع کار با زمان در php در حقیقت یک عدد به تعداد ثانیه گذشته از تاریخ 1 Jan سال 1970 هست. مشابه همین مورد، شما میتونید یک مبدأ در نظر بگیرید و به عنوان ورودی یک عدد دریافت کنید. حالا با محاسبات ریاضی میتونید اون رو به تاریخ امروز برسونید.
سلام خسته نباشد من یک فایل به اسم
db_login.php
و یک فایل به اسمlogin.php
به این اسم دارمحلا اگر یک دستور if در
db_login.php
داشته باشم و یک پیام را echo کندولی می خواهم جواب دستور echo را در فایل
login.php
نمایش بدهمکسی می داند چیطور باید این کار رو انجام بدهم ممنون
سلام علیرضای عزیز
برای این کار راهحلهای مختلفی داری. دو تا از سادهترین اینها هستند: شما میتونید با فراخوانی فایل در php فایل
db_login.php
رو داخلlogin.php
وارد کنید.راهحل دیگه استفاده از دستور get در php برای ارسال پیامتون به فایل login.php هست.
موفق باشید.
توضیحات بسیار عالی، مفید و کارآمد! بسیار ممنون.
خوشحالیم که مورد استفادتون قرار گرفته
موفق باشید
[…] با زیر رشته ها در PHP بیشتر بدانید پیشنهاد میکنیم مقاله کار با substring ها در زبان php را مطالعه […]