strtr
strtr($string, $from, $to)
strtr($string, $array)
Zamienia znaki albo części tekstu według tabeli zamian. Z trzema parametrami zmienia znak po znaku, z tablicą zastępuje całe teksty. W przeciwieństwie do str_replace() przechodzi tekst tylko raz, więc już zastąpionego tekstu nie zmienia ponownie.
Parametry
- $string – tekst do zamiany.
- $from, $to – dwa ciągi tej samej długości. Każdy znak z $from zostanie zastąpiony znakiem na tej samej pozycji w $to.
- $array – zamiast pary $from i $to: tablica w postaci szukany tekst => zamiennik.
Przykłady
// trzy parametry – znak po znaku
echo strtr("2026/09/30", "/", "-"); // 2026-09-30
echo strtr("abc", "ab", "xy"); // xyc
// tablica – całe teksty
echo strtr("Witaj :name, masz :count wiadomości.", array(":name" => "Anna", ":count" => 3)); // Witaj Anna, masz 3 wiadomości.
// zastąpiony tekst nie jest przetwarzany ponownie – zamiana dwóch znaków
echo strtr("ab", array("a" => "b", "b" => "a")); // ba
// str_replace zastępuje po kolei i zmienia wynik pierwszej zamiany jeszcze raz
echo str_replace(array("a", "b"), array("b", "a"), "ab"); // aa
// pierwszeństwo ma najdłuższy szukany tekst
echo strtr("Cześć wszystkim", array("Cześć" => "Dzień dobry", "Cześć wszystkim" => "Dzień dobry wszystkim")); // Dzień dobry wszystkim
// usuwanie polskich znaków – litery ze znakami diakrytycznymi tylko w postaci tablicy
echo strtr("Żółta łódź", array("ż" => "z", "ó" => "o", "ł" => "l", "ź" => "z", "Ż" => "Z", "ą" => "a")); // Zolta lodz
// z trzema parametrami litery ze znakami diakrytycznymi się rozsypują
var_dump(mb_check_encoding(strtr("Łąka", "ą", "a"), "UTF-8")); // bool(false)
Na co uważać
- Postać z trzema parametrami działa na bajtach. Litera ze znakiem diakrytycznym zajmuje w UTF-8 dwa bajty, a wynikiem jest niepoprawny tekst. Dla tekstu z polskimi znakami używaj postaci z tablicą.
- Jeśli $from i $to mają różne długości, nadmiarowe znaki dłuższego z nich są pomijane.
- Tablica nie jest przetwarzana po kolei jak w str_replace(). W każdym miejscu tekstu szuka się najdłuższego pasującego klucza, a zastąpionego tekstu nie sprawdza się ponownie. Dlatego strtr nadaje się do szablonów i do zamiany wartości miejscami.
- Znaki diakrytyczne z dowolnego tekstu usuwa klasa Transliterator z rozszerzenia intl. Własna tablica musi zawierać wszystkie litery, które mogą wystąpić w tekście.
Powiązane funkcje:
str_replace()
str_ireplace()
preg_replace()