تابع str_replace در PHP

یکی دیگر از موارد پرکاربرد در کار با رشته ها جایگزین (replace) کردن بخشی از رشته با مقادیر جدیده.

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

شکل کلی

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

پارامترها:

  • search$ – عبارتی است که باید جست و جو شود، میتواند رشته(string) یا آرایه(array) باشد.
  • replace$ – عبارتی است که باید بجای رشته پیدا شده قرار بگیرد، میتواند رشته(string) یا آرایه(array) باشد.
  • subject$ – محتوای رشته ی اصلی است که عملیات Replace روی آن انجام میگیرد.
  • count$ – اگر مشخص شود تعداد جاگذاری های انجام شده را بصورت عددی برمیگرداند. این پارامتر از نسخه ۵٫۰٫۰ به بعد وجود دارد.

نکاتی در مورد پارامترهای search$ و replace$

  • اگر search$ و replace$ آرایه باشند و تعداد آیتمهای آنها نیز با هم برابر باشند آنوقت هر آیتم search$ با آیتم متناظر در replace$ جایگزین خواهد شد.
  • اگر search$ و replace$ آرایه باشند و آیتمهای replace$ کمتر باشد آنوقت از رشته خالی( ” ) برای جاگذاری بقیه آیتمها استفاده خواهد شد.
  • اگر search$ آرایه و replace$ رشته باشد آنوقت از این رشته برای جاگذاری در تمام آیتمهای search$ استفاده خواهد شد.
  • اگر هر دو رشته باشند،  رشته replace$ بجای رشته search$ قرارخواهد گرفت.

 

مثال ها

مثال اول

دو پارامتر search$ و replace$ از نوع رشته و استفاده از پارامتر اختیاری count$

<?php
 echo STR_REPLACE(' a ',' an ','This is NOT a array!',$c),'<br>Replacements performed: ' . $c;
?>

خروجی:

This is NOT an array!
Replacements performed: 1

 

 مثال دوم

<?php
 echo STR_REPLACE('a','an','This is NOT a array!',$s),'<br>Replacements performed: ' . $s;
?>

خروجی:

This is NOT an anrrany!
Replacements performed: 3

 

مثال سوم

دو پارامتر search$ و replace$ از نوع آرایه و تعداد آیتم های یکسان

<?php
 $search  = array('A', 'B', 'C', 'D', 'E');
 $replace = array('B', 'C', 'D', 'E', 'F');
 $subject = 'ABE';
 echo str_replace($search, $replace,$subject,$c),$c;

# TRACE
#---▼
#۱: BBE
#۲: CBE
#۳: DBE
#۴: EBE
#۵: FBE
#----▼
#۶: FCE
#۷: FDE
#۸: FEE
#۹: FFE
#-----▼
#۱۰:FFF
?>

خروجی:

FFF10

شاید انتظار داشتید نتیجه جایگذاری بصورت BCF باشه اما اینطور نیست! همونطور که براتون Trace کردم ، این تابع میاد A رو به B تبدیل میکنه بعد در همون جا B رو به C تبدیل میکنه و الی آخر تا به کاراکتر یا عبارت پیدا شده بعدی برسه و دوباره همین عملیات برای اون عبارت تکرار میشه. از عمد چنین مثالی زدم تا اگر به چنین چیزی برخوردید متعجب نشید.

 

مثل چهارم

دو پارامتر search$ و replace$ از نوع آرایه و تعداد آیتم های replace$ کمتر از search$

<?php
 $search  = array('A', 'B', 'C', 'D', 'E');
 $replace = array('B', 'C', 'D');
 $subject = 'ABE';
 echo str_replace($search, $replace,$subject,$S),$S;

# TRACE
#---▼
#۱: BBE
#۲: CBE
#۳: DBE
#۴:  BE
#----▼
#۵:  CE
#۶:  DE
#۷:   E
#-----▼
#۸:   
?>

خروجی:

۸

همونطور که گفته شد، اگر آیتمهای replace$ کمتر باشن اونوقت از رشته خالی( ” ) برای جاگذاری بقیه آیتمها استفاده میشه.

 

مثال پنجم

پارامتر search$ از نوع آرایه و replace$ از نوع رشته

<?php
 $search  = array('1','0');
 $replace = '1';
 $subject = '0 1 1 0 1';
 echo str_replace($search, $replace,$subject);
?>

خروجی:

۱ ۱ ۱ ۱ ۱

 

سوالی دارید؟

بدون گرفتن نتیجه اینجا رو ترک نکنید! هر سوالی دارید میتونید در عرض ۱۵ ثانیه ثبت نام و خیلی زود جواب بگیرید.

11 دیدگاه برای «تابع str_replace در PHP»

  1. سلام من یه سوال داشتم:
    $content = str_replace(‘center’,’center2′, $content);
    در خط بالا من میخوام center رو به center2 تغییر بدم. ولی مشکل اینه که من تو صفحه ۳ تا Center دارم و فقط می خوام دومی و سومی تغییر کنن!
    آیا با ایت تابع می تونم این کار رو انجام بدم؟؟؟؟؟

    1. سلام
      به تنهایی نمیتونید اینکارو انجام بدید باید از توابع دیگه مثل strpos هم کمک بگیرید
      کد:

      < ?php
      // REPLACE All BUT NOT FIRST
      $input = 'center center center';
      $needle = 'center';
      $replacement = 'center2';
      $index = strpos ( $input, $needle );
      if ($index !== false) {
      	echo $input = substr ( $input, 0, $index + 1 ) . str_replace ( $needle, $replacement, substr ( $input, $index + 1 ) );
      }
      ?>
      
  2. سلام
    ببخشید اینجا این سوال رو میپرسم
    وقتی می خواهیم به پایگاه داده متصل بشیم چوطری میشه برای گرفتن داده از ورودی و چک کردنش برای اتصال به پایگاه داده فیلتر گذاشت تا از sqlinjectionجلوگیری کرد؟

پاسخ دادن به admin لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

به سوال زیر پاسخ بدهید *