Как я могу заменить определенную часть моей строки на другую?
Строка ввода:
"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
Заметки
Попался!
Важно знать, что str_replace()
работает слева направо от массива. Это означает, что можно заменить значение, которое вы уже заменили. Например:
echo str_replace(array("a", "b"), array("b", "c"), "aabb"); //Probably expected output: bbcc //Actual output: cccc
Без учета регистра
Если вы хотите, чтобы регистр поиска не str_ireplace()
вы можете использовать str_ireplace()
(обратите внимание на i
для case- i nsensitive).
Многомерный массив
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]='&'; } } echo $str;
Использовать функцию preg_replace ()
$text ='this is Old word'; echo $text; echo '<br>'; $text = preg_replace('/\bOld word\b/', 'NEW WORD', $text); echo $text;