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

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

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

"Hello, my name is Santa"

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

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

Ответ 1

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

Или точнее ответить на ваш вопрос:

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

Ответ 2

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

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


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

Заметки

  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() для 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); 
} 
} 
?>

Ответ 3

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().

Ответ 4

Это может также работать без каких-либо строковых функций PHP, в данном случае вы можете заменить символ амперсанда 'a' на '&':

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

Ответ 5

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

$text ='this is the old word';

echo $text;
echo '<br>';

$text = preg_replace('/\bold word\b/', 'NEW WORD', $text);

echo $text;