1

Strtr: примеры (PHP)

Примеры использования strtr для замены строк в PHP
Раздел: Работа со строками
strtr(string string, string from, string to): string

Функция strtr в PHP выполняет замену символов или подстрок в строке. Она используется для трансляции строк с различными вариантами аргументов.

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

Функция имеет две возможные сигнатуры:

  1. strtr(string $string, array $replace_pairs): string — принимает строку и ассоциативный массив, где ключи заменяются на значения.
  2. strtr(string $string, string $from, string $to): string — принимает строку и два строковых аргумента для посимвольной замены.

В первом варианте функция заменяет все вхождения ключей массива на соответствующие значения. Во втором — заменяет каждый символ из строки $from на символ с тем же индексом из строки $to.

Примеры использования strtr
Замена с помощью массива
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

Функция использует более длинные ключи первыми.

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

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

В PHP 8.0.0 функция strtr теперь принимает пустые строки в аргументах $from и $to для посимвольной замены. Ранее это вызывало ошибку.

echo strtr('hello', '', '');
hello

В PHP 8.1.0 функция стала более строгой к типам передаваемых аргументов.

Расширенные примеры
Транслитерация кириллицы
Пример php
$translit = ['а'=>'a','б'=>'b','в'=>'v'];
echo strtr('абвгд', $translit);
abvгд
Экранирование HTML-сущностей
Пример php
$replace = ['&' => '&', '<' => '<', '>' => '>'];
echo strtr('
test & example
', $replace);
<div>test & example</div>
Обработка шаблонов
Пример php
$template = 'Hello {name}! Your code is {code}';
$data = ['{name}' => 'John', '{code}' => '1234'];
echo strtr($template, $data);
Hello John! Your code is 1234
Поразрядная замена символов
Пример php
echo strtr('123456', '135', 'ABC');
A2C4B6

Каждая цифра 1,3,5 заменяется на A,C,B соответственно.

Одновременная замена нескольких форматов
Пример php
$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
Аналоги в других языках
Python: translate и maketrans
table = str.maketrans('elh', 'ELH')
print('hello'.translate(table))
ELHoo
JavaScript: replace с регулярным выражением
console.log('hello world'.replace(/hello|world/g, 
  m => ({
    'hello':'hi',
    'world':'earth'
  }[m])));
hi earth
MySQL: REPLACE и TRANSLATE
SELECT TRANSLATE('hello', 'elh', 'ELH');
ELHoo

Функция TRANSLATE в MySQL аналогична посимвольной замене в strtr. В Python и JavaScript прямой эквивалент отсутствует, требуется использование нескольких методов.

PHP strtr function comments

En
Strtr Translate characters or replace substrings