Как заменить некоторые части моей строки?

Как я могу заменить определенную часть моей строки на другую?

Строка ввода:

"Hello my name is Santa" 

Как я могу изменить все строки в моей строке с чем-то еще?

Я думаю, мне нужен цикл foreach , но я не уверен, как его использовать.

 strtr ($str, array ('a' => '<replacement>')); 

ОБНОВЛЕНИЕ :

 strtr ("hello my name is santa", array ('a' => '<replacement>')); 

Чтобы более точно ответить на ваш вопрос.

Поиск и замена

Есть несколько различных функций / методов для замены определенной части строки чем-то другим, все с их собственными преимуществами.

str_replace() (двоичный сейф, чувствительный к регистру)

аргументы

смешанный str_replace (смешанный $ search , смешанный $ replace , смешанный $ subject [, int & $ count])

str_replace() имеет 3 требуемых аргумента, как вы можете видеть в приведенном выше определении с правильным порядком, все из которых могут принимать строку, а также массив в качестве аргумента!

Поиск и замена

  • search (string) AND replace (string) → Заменяет строку поиска на строку replace.

  • search (array) AND replace (string) → Заменяет все элементы поиска на строку replace.

  • search (string) AND replace (array) → Выдает уведомление: «Обратите внимание: преобразование массива в строку», потому что заменяющий массив только для одной строки поиска не имеет смысла, поэтому он пытается преобразовать массив в строку.

  • search (array) AND replace (array) → Заменяет каждый элемент поиска на соответствующий элемент replace (Keys игнорируются!).

    • поиск (больше элементов) И замена (меньше элементов) → Заменяет каждый элемент поиска соответствующим элементом замены (для отсутствующих элементов замены будет использоваться пустая строка).

    • поиск (меньше элементов) И заменить (больше элементов) → Заменяет каждый элемент поиска соответствующим элементом замены (ненулевые элементы замещения игнорируются).

Предмет

  • subject (строка) → Замена выполняется для строки темы.

  • subject (array) → Замена выполняется для каждого элемента массива.

Код

 echo str_replace("search", "replace", "text search text"); echo str_replace(["t", "a"], "X", "text search text"); echo str_replace("search", ["replace1", "replace2"], "text search text"); echo str_replace(["a", "c"], ["X", "Y"], "text search text"); 

Вывод

 text replace text XexX seXrch XexX Notice: Array to string conversion text seXrYh text 

Заметки

  1. Попался!

    Важно знать, что str_replace() работает слева направо от массива. Это означает, что можно заменить значение, которое вы уже заменили. Например:

     echo str_replace(array("a", "b"), array("b", "c"), "aabb"); //Probably expected output: bbcc //Actual output: cccc 
  2. Без учета регистра

    Если вы хотите, чтобы регистр поиска не str_ireplace() вы можете использовать str_ireplace() (обратите внимание на i для case- i nsensitive).

  3. Многомерный массив

    str_replace() / str_ireplace() НЕ работает для многомерных массивов. См. Этот комментарий руководства для такой реализации. Конечно, вы также можете заменить str_replace() на str_ireplace() для нечувствительности к регистру.

Если вы хотите собрать все вместе и создать функцию, которая также работает для многомерных массивов без учета регистра, вы можете сделать что-то вроде этого:

 <?php function str_ireplace_deep($search, $replace, $subject) { if (is_array($subject)) { foreach($subject as &$oneSubject) $oneSubject = str_ireplace_deep($search, $replace, $oneSubject); unset($oneSubject); return $subject; } else { return str_ireplace($search, $replace, $subject); } } ?> с <?php function str_ireplace_deep($search, $replace, $subject) { if (is_array($subject)) { foreach($subject as &$oneSubject) $oneSubject = str_ireplace_deep($search, $replace, $oneSubject); unset($oneSubject); return $subject; } else { return str_ireplace($search, $replace, $subject); } } ?> 

str_replace достаточно для простых замещающих заданий ( таких как замена одной буквы ), но рекомендуется использовать preg_replace ( если вы хотите что-то более гибкое или универсальное ), потому что оно гибкое и универсальное. А так как «а» – всего лишь пример …:

 $String = preg_replace('/<string>/','<replacement>',$String); 

Или если вы хотите сразу несколько замен:

 $String = preg_replace(array('/<string 1>/','/<string 2>/'),array('<replacement 1>','<replacement 2>'),$String); 

preg_replace может, к сожалению, быть довольно сложным в использовании. Я рекомендую следующие чтения: http://php.net/manual/en/function.preg-replace.php http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html

Кроме того, если вы решите использовать str_replace (), и ваша замена должна быть чувствительной к регистру, вам понадобится str_ireplace ().

это может работать и без каких-либо функций php str, изменяя ваш символ 'a' до '&' ampersand:

 for ($i=0; $i<strlen($str); $i++){ if ($str[$i]=='a'){ $str[$i]='&amp;'; } } echo $str; 

Использовать функцию preg_replace ()

 $text ='this is Old word'; echo $text; echo '<br>'; $text = preg_replace('/\bOld word\b/', 'NEW WORD', $text); echo $text;