Substr replace: примеры (PHP)
substr_replace(mixed string, mixed replacement, mixed start [, mixed length]): string|arrayФункция substr_replace в PHP
Функция substr_replace() заменяет часть строки, заданную смещением и длиной, на другую строку. Она применяется для модификации подстрок в конкретной позиции, не требуя сложных манипуляций с конкатенацией.
- $string (string) – исходная строка для обработки.
- $replacement (string) – строка, которая вставляется на место заменяемого участка.
- $start (int) – позиция, с которой начинается замена. Если значение отрицательное, отсчёт ведётся с конца строки.
- $length (int | null) – длина заменяемого фрагмента. Если равен null, замена продолжается до конца строки. Отрицательное значение задаёт количество символов от конца строки.
Замена части строки с положительным смещением:
echo substr_replace('Привет мир', 'всем', 7);Привет всем
Замена с указанием длины:
echo substr_replace('Яблоко груша', 'апельсин', 0, 6);апельсин груша
Использование отрицательного смещения:
echo substr_replace('0123456789', 'abc', -3);0123456abc
Замена с отрицательной длиной:
echo substr_replace('0123456789', 'abc', 2, -3);01abc789
Передача массива в качестве аргументов:
print_r(substr_replace(['яблоко', 'груша'], 'сок', -3));Array
(
[0] => яблосок
[1] => грсок
)str_replace() – заменяет все вхождения заданного значения. Подходит для массовой замены, но не для позиционной.
preg_replace() – выполняет замену по регулярному выражению. Используется для сложных шаблонов поиска.
substr() – возвращает часть строки. Может комбинироваться с конкатенацией для достижения похожего результата.
Передача неверного типа данных приводит к неожиданным результатам:
echo substr_replace(12345, '9', 1, 1);19345
Ошибка в расчёте длины при использовании многобайтовых кодировок:
echo substr_replace('Привет', 'ой', 2, 2);Пойвет
Некорректное поведение при отрицательной длине, превышающей смещение:
echo substr_replace('abcdef', 'xyz', 2, -5);abxyzcdef
В PHP 8.0 функция substr_replace() стала строго типизированной. Передача аргументов несовместимых типов вызывает TypeError. Ранее некорректные типы преобразовывались.
Множественная замена в массивах строк:
$input = ['A: 10', 'B: 20', 'C: 30'];
$repl = substr_replace($input, 'Значение=', 0, 3);
print_r($repl);Array
(
[0] => Значение= 10
[1] => Значение= 20
[2] => Значение= 30
)Постепенная маскировка данных:
$card = '1234567812345678';
echo substr_replace($card, str_repeat('*', 8), 4, 8);1234********5678
Динамическое обновление шаблонов:
$template = 'Дата: ___, Время: ___';
$result = substr_replace($template, '2024-01-15', 6, 3);
$result = substr_replace($result, '12:00', 20, 3);
echo $result;Дата: 2024-01-15, Время: 12:00
Обработка строк с учётом многобайтовых символов через mb_substr_replace:
function mb_substr_replace($str, $repl, $start, $length = null) {
$before = mb_substr($str, 0, $start, 'UTF-8');
$after = $length === null ? '' : mb_substr($str, $start + $length, null, 'UTF-8');
return $before . $repl . $after;
}
echo mb_substr_replace('Привет мир', 'друг', 7, 3);Привет друг
Python: Используется срезы строк.
text = "Привет мир"
result = text[:6] + "всем" + text[7:]
print(result)Привет всем
JavaScript: Метод substring() в комбинации с конкатенацией.
let text = "Привет мир";
let result = text.substring(0, 7) + "всем";
console.log(result);Привет всем
MySQL: Функция INSERT() для вставки подстроки.
SELECT INSERT('Привет мир', 8, 3, 'всем');Привет всем