کار با زیر رشته PHP

زیررشته به زیربخش‌های یک رشته اصلی گفته می‌شود. با توابع مختلفی که در اختیار داریم می‌توانیم یک بخش از متن را جدا کرده، تعداد تکرار یک عبارت را جستجو کنیم یا تغییراتی روی رشته‌ها اعمال کنیم. در این آموزش با ۲ تابع پرکاربرد کار با زیررشته در 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 و شمارش تکرار کلمه در متن آشنا شده باشید. پیشنهاد می‌کنم همین الآن این توابع را در حالت‌های مختلف روی چند رشته تمرین کنید.

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

اگر سؤال یا نکته‌ای در این مورد دارید، بخش دیدگاه‌ها برای شماست. 🙂