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

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

Функция str_ireplace в PHP

Функция str_ireplace осуществляет замену всех вхождений искомого значения на указанное значение в строке или массиве. Отличительная особенность — регистронезависимый поиск. Использование функции актуально при необходимости модификации текста без учета регистра символов, например, при обработке пользовательского ввода или форматировании данных.

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

Функция принимает до четырех параметров:

  • search (mixed): Искомое значение. Может быть строкой или массивом строк.
  • replace (mixed): Значение для замены. Может быть строкой или массивом строк.
  • subject (mixed): Строка или массив, в котором производится замена.
  • count (int, необязательный): Если указан, в него будет записано количество выполненных замен.

Когда аргументы search и replace являются массивами, функция обрабатывает их поэлементно. Если массив replace содержит меньше элементов, чем search, для отсутствующих элементов используется пустая строка.

Краткие примеры использования str_ireplace

Простая замена в строке
$text = 'PHP это язык программирования. PHP популярен.';
$result = str_ireplace('php', 'JavaScript', $text);
echo $result;
JavaScript это язык программирования. JavaScript популярен.
Замена с использованием массивов
$text = 'Кот, кошка, котята.';
$search = ['кот', 'кошка'];
$replace = ['собака', 'собака'];
$result = str_ireplace($search, $replace, $text);
echo $result;
Собака, собака, котята.
Подсчет количества замен
$text = 'Яблоко, яблоко, яблоко.';
$count = 0;
$result = str_ireplace('яблоко', 'груша', $text, $count);
echo 'Результат: ' . $result . '\n';
echo 'Замен произведено: ' . $count;
Результат: Груша, груша, груша.
Замен произведено: 3
Работа с массивом в качестве subject
$array = ['Синий дом', 'Красный дом', 'Зеленый дом'];
$result = str_ireplace('дом', 'автомобиль', $array);
print_r($result);
Array
(
    [0] => Синий автомобиль
    [1] => Красный автомобиль
    [2] => Зеленый автомобиль
)

Похожие функции в PHP

Функция str_replace выполняет ту же задачу, но с учетом регистра. Использование предпочтительно, когда важно различать прописные и строчные буквы.

preg_replace

Функция preg_replace выполняет поиск и замену по регулярному выражению. Модификатор i позволяет сделать поиск регистронезависимым. Выбор в пользу preg_replace оправдан при необходимости сложного паттерна поиска.

Функция substr_replace заменяет часть строки, заданную смещением и длиной. Используется, когда позиция замены известна, а не ее содержание.

Функция strtr преобразует заданные символы или заменяет подстроки. Работает быстрее для множественных замен одиночных символов или когда заменяемые подстроки имеют разную длину.

Типичные ошибки при использовании

Непредвиденное поведение при массивах разной длины
$text = 'a b c';
$result = str_ireplace(['a', 'b', 'c'], ['X', 'Y'], $text);
echo $result;
X Y

Третий элемент массива search ('c') заменяется на пустую строку, так как для него нет пары в replace.

Путаница с порядком аргументов
$text = 'Hello World';
$result = str_ireplace($text, 'World', 'Hello');
echo $result;

Функция ищет в строке 'Hello' подстроку 'Hello World' и заменяет её на 'World'. Совпадений нет, возвращается исходная строка 'Hello'.

Рекурсивная замена
$text = 'a';
$result = str_ireplace('a', 'a b', $text);
echo $result;
a b

Замена производится один раз, рекурсивной замены не происходит. Функция не обрабатывает результат замены повторно.

Изменения в последних версиях PHP

В PHP 8.0 поведение функции str_ireplace не претерпело значительных изменений. Однако, в более ранних версиях, начиная с PHP 5.0, функция поддерживает параметр count. В PHP 7.4 и более ранних, при передаче неверных типов аргументов, вызывались предупреждения. В PHP 8.0 многие подобные предупреждения были преобразованы в исключения TypeError. Общий принцип работы функции остается стабильным.

Расширенные примеры использования

Комплексная обработка текста с HTML
Пример php
$html = '<div>Пример <b>Жирного</b> текста.</div>';
$tags = ['div', 'b'];
$result = str_ireplace($tags, '', $html);
echo htmlspecialchars($result);
Пример Жирного текста.
Чистка нежелательных слов
Пример php
$text = 'Этот товар просто отличный и не плохой!';
$stopWords = ['просто', 'не', 'плохой'];
$cleanText = str_ireplace($stopWords, '', $text);
$cleanText = preg_replace('/\s+/', ' ', trim($cleanText));
echo $cleanText;
Этот товар отличный и !
Замена с учетом контекста (эмуляция)
Пример php
$text = 'цветы ЦВЕТЫ цветы';
$search = 'цветы';
$replace = 'ягоды';
// Замена только второго вхождения (регистронезависимо)
$parts = explode($search, $text, 3);
$result = $parts[0] . $search . $parts[1] . $replace . $parts[2];
echo $result;
цветы ЦВЕТЫ ягоды
Работа с многобайтовыми строками

Важно помнить, что str_ireplace не поддерживает многобайтовые кодировки напрямую. Для UTF-8 используют комбинацию с mb_convert_case или preg_replace с модификатором u.

Пример php
$text = 'Привет Мир';
$search = 'мир';
$replace = 'Вселенная';
// Решение через preg_replace
$result = preg_replace('/'.preg_quote($search, '/').'/iu', $replace, $text);
echo $result;
Привет Вселенная

Аналоги функции в других языках

Python

Метод str.replace() в Python регистрозависим. Для регистронезависимой замены используют комбинацию с модулем re.

import re
text = 'Python is great. python is simple.'
result = re.sub(r'(?i)python', 'Java', text)
print(result)
Java is great. Java is simple.
JavaScript

Метод String.prototype.replace() с флагом 'gi' в регулярном выражении.

let text = 'JavaScript is flexible. javascript is powerful.';
let result = text.replace(/javascript/gi, 'TypeScript');
console.log(result);
TypeScript is flexible. TypeScript is powerful.
MySQL

Функция REPLACE() в MySQL регистрозависима при использовании сборок с учетом регистра. Для регистронезависимой замены данные приводят к одному регистру или используют REGEXP_REPLACE() (начиная с MySQL 8.0).

-- REPLACE() чувствительна к регистру в соответствующей сборке
SELECT REPLACE('MySQL Database', 'mysql', 'PostgreSQL');
-- Использование REGEXP_REPLACE с флагом 'i'
SELECT REGEXP_REPLACE('MySQL Database', 'mysql', 'PostgreSQL', 1, 0, 'i');
MySQL Database
PostgreSQL Database

PHP str_ireplace function comments

En
Str ireplace Case-insensitive version of str_replace