تابع 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 دارم و فقط می خوام دومی و سومی تغییر کنن!
    آیا با ایت تابع می تونم این کار رو انجام بدم؟؟؟؟؟

    • سلام
      به تنهایی نمیتونید اینکارو انجام بدید باید از توابع دیگه مثل 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جلوگیری کرد؟

پاسخ دهید

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

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