Str replace: примеры (PHP)

Замена строк в PHP: работа с функцией str_replace
Раздел: Работа со строками
str_replace(mixed search, mixed replace, mixed subject [, int &count]): mixed
Функция str_replace в PHP

Функция str_replace() используется для замены всех вхождений строки поиска на строку замены. Она применяется при обработке текста, генерации динамического контента, санировании данных или форматировании строк. Работает с простыми и массовыми заменами.

Аргументы функции:

  • search (обязательный): Искомая строка, массив строк для поиска.
  • replace (обязательный): Строка или массив строк для замены найденных значений.
  • subject (обязательный): Строка или массив, в котором производится поиск и замена.
  • count (необязательный): Переменная, в которую записывается количество произведенных замен (передается по ссылке).
Простые примеры работы str_replace
Базовая замена
<?
$str = 'Яблоко вкусное.';
$result = str_replace('Яблоко', 'Апельсин', $str);
echo $result; // Апельсин вкусное.
?>
Апельсин вкусное.
Использование массивов
<?
$str = 'Собака бежит быстро.';
$search = ['Собака', 'бежит'];
$replace = ['Кошка', 'идет'];
$result = str_replace($search, $replace, $str);
echo $result; // Кошка идет быстро.
?>
Кошка идет быстро.
Параметр count
<?
$str = 'a a a b c';
$count = 0;
$result = str_replace('a', 'z', $str, $count);
echo $result . ' Замен: ' . $count; // z z z b c Замен: 3
?>
z z z b c Замен: 3
Похожие функции в PHP
  • str_ireplace(): Регистронезависимый аналог str_replace(). Предпочтительнее, когда важен поиск без учета регистра.
  • substr_replace(): Заменяет часть строки, заданную смещением и длиной. Используется для замены по позиции, а не по содержимому.
  • preg_replace(): Выполняет поиск и замену по регулярному выражению. Необходима для сложных шаблонов поиска.
  • strtr(): Заменяет символы или подстроки, часто эффективнее для множественных замен фиксированных пар. Работает побайтово.
Аналоги в других языках
Python: replace()
text = "Яблоко вкусное."
result = text.replace("Яблоко", "Апельсин")
print(result)  # Апельсин вкусное.
Апельсин вкусное.

Особенность: Метод строки, а не глобальная функция. Не поддерживает одновременную замену массивов, для этого используют циклы или re.sub().

JavaScript: replace() и replaceAll()
let str = "Собака, собака, Собака";
// replace() меняет только первое вхождение (без флага g)
let result1 = str.replace("Собака", "Кот");
// replaceAll() меняет все вхождения
let result2 = str.replaceAll("Собака", "Кот");
console.log(result1); // Кот, собака, Собака
console.log(result2); // Кот, Кот, Кот
Кот, собака, Собака
Кот, Кот, Кот

Особенность: В JS replace() по умолчанию заменяет только первое совпадение. Для замены всех используется регулярное выражение с флагом g или метод replaceAll().

MySQL: REPLACE()
SELECT REPLACE('Исходный текст.', 'текст', 'результат');
-- Результат: Исходный результат.
Исходный результат.

Особенность: SQL-функция для работы с данными в столбцах таблиц. Используется в запросах.

Распространенные ошибки
Несоответствие элементов в массивах search и replace
<?
$str = 'a b c';
$search = ['a', 'b', 'c'];
$replace = ['x', 'y']; // Меньше элементов, чем в search
$result = str_replace($search, $replace, $str);
echo $result; // x y c
?>
x y c

Лишние элементы search заменяются на пустые строки. Это приводит к неочевидным результатам.

Рекурсивная замена
<?
$str = 'a b c';
$result = str_replace(['a', 'b'], ['b', 'a'], $str);
echo $result; // b a c
?>
b a c

Замена происходит последовательно для каждого элемента массива, а не за один проход. Сначала 'a' меняется на 'b', затем в новой строке 'b' меняется на 'a', что может привести к обратной замене.

Пустой search
<?
$str = 'test';
$result = str_replace('', 'X', $str);
echo $result; // XtXeXsXtX
?>
XtXeXsXtX

Пустая строка поиска находит позицию перед каждым символом и в конце строки, что приводит к вставке замены в этих местах.

Изменения в версиях PHP
  • PHP 8.0.0: Параметр $search и $replace теперь принимают только значения типа array|string. Передача null и других недопустимых типов вызывает фатальную ошибку TypeError. Ранее null интерпретировался как пустая строка.
  • PHP 7.4.0: Добавлена поддержка передачи параметра $count по ссылке, хотя это и не было строго обязательным ранее, теперь это официально задокументированное поведение.
Расширенные примеры применения
Обработка массива в качестве subject
Пример php
<?
$phrases = ['Привет, мир', 'Добрый день', 'Мир прекрасен'];
$result = str_replace('мир', 'Вселенная', $phrases, $count, true);
print_r($result);
echo "Всего замен: $count\n";
?>
Array
(
    [0] => Привет, Вселенная
    [1] => Добрый день
    [2] => Вселенная прекрасен
)
Всего замен: 2
Использование с str_ireplace
Пример php
<?
$text = "PHP и php это круто";
$result = str_ireplace('php', 'Python', $text);
echo $result; // Python и Python это круто
?>
Python и Python это круто
Эффективное удаление множества слов
Пример php
<?
$text = "Этот плохой, ужасный, отвратительный код!";
$badWords = ['плохой', 'ужасный', 'отвратительный'];
$censored = str_replace($badWords, '***', $text);
echo $censored; // Этот ***, ***, *** код!
?>
Этот ***, ***, *** код!
Сравнение с strtr для побайтовой замены
Пример php
<?
$str = "aaabbbccc";
$trans = ['a' => 'x', 'b' => 'y', 'c' => 'z'];
// str_replace - последовательная замена по элементам массива
$res1 = str_replace(array_keys($trans), array_values($trans), $str);
// strtr - параллельная замена (побайтовая)
$res2 = strtr($str, $trans);
echo "str_replace: $res1\n"; // str_replace: xxxyyyzzz
?>
str_replace: xxxyyyzzz
strtr: xxxyyyzzz

PHP str_replace function comments

En
Str replace Replace all occurrences of the search string with the replacement string