گاهی اوقات نیاز هست تا تعداد تکرار شدن یک زیر رشته (کلمه یا عبارت) را در یک رشته اصلی و بزرگ تر بررسی کنیم. در زبان برنامه نویسی PHP تابعی مستقل، به نام substr_count() برای این منظور استفاده میشود.

ساختار کلی تابع substr_count

این تابع دارای چهار ورودی است که دو ورودی اول آن اجباری و دو ورودی دیگر اختیاری است.


کد:
substr_count($STRING, $SUBSTR, $START, $LEN)

آرگومان های تابع


  • آرگومان اول (STRING) همان رشته اصلی است که میخواهیم تعداد تکرار زیر رشته مورد نظر خود را در آن به دست آوریم.
  • دومین ورودی (SUBSTR) همان زیر رشته مورد نظر ماست که میتواند از یک کاراکتر تا رشته ای طولانی تر باشد.
  • ورودی سوم (START) یک آرگومان اختیاری است. با تعریف این ورودی مشخص میکنیم که میخواهیم عملیات جستجو و شمارش از ایندکس مشخصی از رشته اصلی آغاز شود.
  • چارمین آرگومان (LEN) نیز یک ورودی اختیاری است و با وجود ورودی قبلی معنا پیدا میکند. با تعریف این ورودی مشخص میکنیم که عملیات جستجو از موقعیت START شروع شده و در موقعیت START + LEN پایان یابد.

توجه داشته باشید، در صورتی که مجموع مقدار موقعیت شروع و اندازه بیشتر از طول رشته اصلی شود، با خطا یا هشدار مواجه خواهید شد!

حالات مختلف صدا زدن تابع substr_count

همانطور که حدس زده اید، سه حالت مختلف برای صدا زدن این تابع با رشته و زیر رشته مورد نظرمان وجود دارد:
1- تعریف دو آرگومان اول : با تعریف رشته اصلی (STRING) و زیر رشته (SUBSTR)، تعداد تکرار زیر رشته در تمام طول رشته اصلی شمارش شده و به عنوان خروجی به ما داده میشود.

کد:
<?php $str = "Welcome Dear Users! This is a test message."; $substr = "es"; echo substr_count($str, $substr); // 2 ?>
2- تعریف دو آرگومان اجباری به همراه آرگومان سوم : در اینصورت ابتدا زیر رشته ای با موقعیت شروع داده شده تا پایان رشته ایجاد شده و سپس عملیات شمارش تکرار انجام میشود.
به بیانی ساده تر، ابتدا رشته اصلی، خود یک زیر رشته شده و به عنوان رشته اصلی شناخته میشود. سپس عملیات شمارش روی رشته اصلی جدید و با زیر رشته ورودی ما انجام خواهد شد.
کد:
<?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 ?>