(PHP 4, PHP 5, PHP 7, PHP 8)
strtr — Заменяет символы или подстроки
Альтернативная сигнатура (не поддерживается с именованными аргументами):
При передаче трёх аргументов функция возвращает копию
строки string, в которой заменила вхождения каждого
однобайтового символа строки from
на символ строки to с тем же индексом:
каждое вхождение символа $from[$n] заменяется
символом $to[$n], где $n —
допустимое смещение строки в обоих аргументах.
При несовпадении длины строк from
и to «лишние» символы в более
длинной строке игнорируются, поэтому длина возвращаемой строки не изменяется
относительно исходной строки string.
При передаче двух аргументов во втором передают значение с типом array
в формате array('from' => 'to', ...). Функция вернёт
строку, в которой заменит вхождения ключей массива значениями.
Самые длинные ключи обрабатываются первыми. После замены новое значение подстроки больше не участвует в поиске.
Во втором аргументе альтернативной сигнатуры поддерживаются ключи и значения произвольной длины,
кроме элемента с пустым ключом; при замене вхождения другим количеством символов
длина возвращаемого значения не совпадёт с длиной исходной строки string.
Функция работает эффективнее с ключами одинаковой длины.
stringСтрока (string), в которой требуется заменить символы или подстроки.
from
Строка (string) символов, которые заменятся символами строки to.
to
Строка (string) символов, которыми заменятся символы строки from.
replace_pairs
Параметр replace_pairs
указывают вместо параметров to и from.
В аргументе передают массив (array)
в форме array('from' => 'to', ...).
Функция игнорирует элементы массива replace_pairs
с ключами в виде пустой строки (string) — "",
а с PHP 8.0.0 выдаёт ошибку уровня E_WARNING.
Функция возвращает результат преобразования входной строки (string).
Пример #1 Пример замены символов функцией strtr()
<?php
$original = "He1Lo, w0rld!";
// При вызове с тремя аргументами функция strtr() заменяет символы побайтово.
$result = strtr($original, "1L0", "llo");
echo $result;Результат выполнения приведённого примера:
Hello, world!
Следующий пример показывает поведение функции strtr()
при вызове только с двумя аргументами. Обратите внимание
на приоритет замен — символ "h" не участвует в поиске,
поскольку массив содержит более длинные совпадения, — и как после замены новый текст
больше не участвует в поиске.
Пример #2 Пример замены подстрок при вызове функции strtr() с двумя аргументами
<?php
$replace_pairs = ["h" => "-", "hello" => "hi", "hi" => "hello"];
echo strtr("hi all, I said hello", $replace_pairs);Результат выполнения приведённого примера:
hello all, I said hi
Функция strtr() работает в двух режимах: при вызове с тремя аргументами выполняется побайтовая замена, а при вызове с двумя заменяются и более длинные подстроки.
Пример #3 Сравнение поведения функции strtr()
<?php
// Однобайтовые символы
$singlebyte_string = "baab";
echo strtr($singlebyte_string, "ab", "01"), "\n"; // Побайтовая замена
$replace_pairs = ["ab" => "01"];
echo strtr($singlebyte_string, $replace_pairs), "\n"; // Замена подстрок
// Многобайтовые символы
$multibyte_string = "Ä"; // В кодировке UTF-8 символ кодируется двумя байтами: "\xC3\x84"
$result = strtr($multibyte_string, 'Ä', 'A');
echo bin2hex($result), "\n"; // "4184", где "41" — байт символа "A", которым заменился байт "c3",
// а "84" — байт, которому не нашлось замены в третьем аргументе;
// последовательность байтов теперь невозможно интерпретировать
// как символ в кодировке UTF-8
$replace_pairs = ['Ä' => 'A'];
echo strtr($multibyte_string, $replace_pairs); // Правильный перевод многобайтовой строкиРезультат выполнения приведённого примера:
1001 ba01 4184 A