Как я могу заменить определенную часть моей строки другой?
Строка ввода:
"Hello, my name is Santa"
Как я могу изменить все в моей строке с чем - то другим? a
Я думаю, что мне нужен цикл foreach
, но я не уверен, как его использовать.
Как я могу заменить определенную часть моей строки другой?
Строка ввода:
"Hello, my name is Santa"
Как я могу изменить все в моей строке с чем - то другим? a
Я думаю, что мне нужен цикл foreach
, но я не уверен, как его использовать.
strtr ($str, array ('a' => '<replacement>'));
Или точнее ответить на ваш вопрос:
strtr ("Hello, my name is Santa", array ('a' => '<replacement>'));
Есть несколько различных функций/методов для замены определенной части строки чем-то другим, все с их собственными преимуществами.
str_replace()
метод (двоичный сейф, case- чувствительный)аргументы
смешанный 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) → Заменяет каждый элемент поиска соответствующим элементом замены (Ключи игнорируются!).
search(more elements) AND replace(less elements) → Заменяет каждый элемент поиска соответствующим элементом замены (для отсутствующих элементов замены будет использоваться пустая строка).
search(less elements) AND replace(more elements) → Заменяет каждый элемент поиска на соответствующий элемент замещения (элементы ненулевой замены игнорируются).
Предмет
subject(string) → Замена выполняется для строки темы.
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()
для case- нечувствительным.
Если вы хотите собрать все вместе и создать функцию, которая также работает для многомерных массивов case-, то вы можете сделать что-то вроде этого:
<?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 (если вы хотите что-то более гибкое или универсальное), потому что оно гибкое и универсальное. И поскольку "a" - всего лишь пример...:
$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, в данном случае вы можете заменить символ амперсанда 'a' на '&':
for ($i=0; $i<strlen($str); $i++){
if ($str[$i] == 'a'){
$str[$i] = '&';
}
}
echo $str;
Используйте функцию preg_replace()
$text ='this is the old word';
echo $text;
echo '<br>';
$text = preg_replace('/\bold word\b/', 'NEW WORD', $text);
echo $text;