Strtr: примеры (PHP)
strtr(string string, string from, string to): stringФункция strtr в PHP выполняет замену символов или подстрок в строке. Она используется для трансляции строк с различными вариантами аргументов.
Функция имеет две возможные сигнатуры:
- strtr(string $string, array $replace_pairs): string — принимает строку и ассоциативный массив, где ключи заменяются на значения.
- strtr(string $string, string $from, string $to): string — принимает строку и два строковых аргумента для посимвольной замены.
В первом варианте функция заменяет все вхождения ключей массива на соответствующие значения. Во втором — заменяет каждый символ из строки $from на символ с тем же индексом из строки $to.
echo strtr('hello world', ['hello' => 'hi', 'world' => 'earth']);hi earth
echo strtr('hello', 'elh', 'ELH');ELHoo
echo strtr('abc', ['a' => '1', 'ab' => '2', 'abc' => '3']);3
Функция использует более длинные ключи первыми.
str_replace — заменяет все вхождения искомой строки на заданную. Поддерживает массивы для поиска и замены. В отличие от strtr, не отдает приоритет длинным совпадениям.
preg_replace — выполняет замену по регулярному выражению. Используется для сложных паттернов замены.
substr_replace — заменяет часть строки, заданную смещением и длиной.
Функция strtr предпочтительна для простых замен множества символов или подстрок, особенно когда важна однократная обработка и приоритет длинных ключей.
echo strtr('test', 'ab', 'XYZ');test
Если строка замены короче исходной, лишние символы игнорируются, что может привести к неожиданным результатам.
echo strtr('text', 'ab', []);Warning: strtr(): The second argument is not an array...
При использовании трех аргументов второй и третий должны быть строками.
echo strtr('a', ['a' => 'b', 'b' => 'c']);b
Замена происходит только один раз, рекурсивной обработки нет.
В PHP 8.0.0 функция strtr теперь принимает пустые строки в аргументах $from и $to для посимвольной замены. Ранее это вызывало ошибку.
echo strtr('hello', '', '');hello
В PHP 8.1.0 функция стала более строгой к типам передаваемых аргументов.
$translit = ['а'=>'a','б'=>'b','в'=>'v'];
echo strtr('абвгд', $translit);abvгд
$replace = ['&' => '&', '<' => '<', '>' => '>'];
echo strtr('test & example', $replace);<div>test & example</div>
$template = 'Hello {name}! Your code is {code}';
$data = ['{name}' => 'John', '{code}' => '1234'];
echo strtr($template, $data);Hello John! Your code is 1234
echo strtr('123456', '135', 'ABC');A2C4B6
Каждая цифра 1,3,5 заменяется на A,C,B соответственно.
$text = 'Date: {Y-m-d} Time: {H:i:s}';
$format = ['{Y-m-d}' => date('Y-m-d'), '{H:i:s}' => date('H:i:s')];
echo strtr($text, $format);Date: 2023-12-15 Time: 14:30:22
table = str.maketrans('elh', 'ELH')
print('hello'.translate(table))ELHoo
console.log('hello world'.replace(/hello|world/g,
m => ({
'hello':'hi',
'world':'earth'
}[m])));hi earth
SELECT TRANSLATE('hello', 'elh', 'ELH');ELHoo
Функция TRANSLATE в MySQL аналогична посимвольной замене в strtr. В Python и JavaScript прямой эквивалент отсутствует, требуется использование нескольких методов.