W3docs

strtr()

La fonction strtr() en PHP traduit des sous-chaînes dans une chaîne. Utile pour le traitement de texte avec des remplacements efficaces.

Introduction

La fonction strtr() en PHP traduit des sous-chaînes dans une chaîne. Elle est particulièrement utile pour le traitement de texte lorsque des séquences spécifiques doivent être remplacées efficacement. Cet article couvre sa syntaxe, son comportement et son utilisation pratique.

Comprendre la fonction strtr()

La fonction strtr() supporte deux signatures :

Signature avec tableau

strtr(string $str, array $replace) : string

Ici, $str est la chaîne d'entrée et $replace est un tableau associatif qui associe des sous-chaînes à leurs remplacements. La fonction remplace toutes les occurrences des clés par leurs valeurs correspondantes.

Signature à trois arguments

strtr(string $str, string $from, string $to) : string

Dans cette forme, $from et $to doivent avoir la même longueur. Chaque caractère de $from est associé au caractère à la même position dans $to.

Comportement important : strtr() remplace les sous-chaînes en utilisant un algorithme de correspondance la plus longue en premier. Cela signifie que les motifs qui se chevauchent sont résolus en privilégiant la correspondance la plus longue, et les remplacements ne sont pas appliqués récursivement à la sortie.

Forme tableau : remplacement de sous-chaînes

L'utilisation la plus courante de strtr() est la forme tableau à deux arguments. Vous passez un tableau associatif qui associe chaque sous-chaîne à rechercher à la valeur qu'elle doit devenir.

php— editable, runs on the server

Ici, strtr() remplace chaque "H" par "J" et chaque "W" par "Z". Les clés peuvent avoir n'importe quelle longueur, vous pouvez donc associer des mots entiers tout aussi facilement que des caractères individuels :

<?php

$string = "The quick brown fox";
echo strtr($string, ["quick" => "slow", "brown" => "red"]);
// Output: The slow red fox

Les remplacements sont appliqués en une seule passe

C'est le comportement qui surprend souvent les développeurs. strtr() parcourt la chaîne une seule fois et ne réexamine jamais le texte qu'il a déjà remplacé. Ainsi, une valeur que vous insérez ne sera pas à nouveau mise en correspondance par une autre règle :

<?php

echo strtr("Hi all, I said hello", ["Hi" => "Hello", "hello" => "hi"]);
// Output: Hello all, I said hi

Le "Hi" devient "Hello", mais ce nouveau "Hello" n'est pas ensuite transformé en "hi" par la deuxième règle — le remplacement n'est pas récursif. Cela rend strtr() sûr pour échanger deux valeurs simultanément (par exemple "yes" <-> "no"), ce que str_replace() ne peut pas faire en un seul appel.

La correspondance la plus longue l'emporte

Lorsque deux clés peuvent correspondre à la même position, strtr() préfère toujours la plus longue :

<?php

echo strtr("a b c", ["a b" => "X", "a" => "Y"]);
// Output: X c

Même si "a" apparaît en premier dans le tableau, la clé plus longue "a b" correspond à cette position et a la priorité. L'ordre du tableau ne compte pas — seule la longueur de la clé compte.

Forme à trois arguments : traduction caractère par caractère

La forme à trois arguments associe des caractères individuels. $from et $to doivent avoir la même longueur ; chaque caractère de $from est remplacé par le caractère à la même position dans $to.

<?php

echo strtr("Hello World", "lo", "LO");
// Output: HeLLO WOrLd

Chaque l devient L et chaque o devient O. Si $from est plus long que $to, les caractères supplémentaires sont ignorés. Cette forme est pratique pour des échanges simples de type chiffrement ou pour normaliser des caractères, mais elle ne peut remplacer que des caractères individuels — utilisez la forme tableau lorsque vous devez remplacer des sous-chaînes de plusieurs caractères.

strtr() vs str_replace()

Les deux fonctions remplacent du texte, mais se comportent différemment :

  • strtr() fonctionne en une seule passe non récursive et résout les conflits par correspondance la plus longue. Le texte remplacé n'est jamais réexaminé.
  • str_replace() applique ses règles de manière séquentielle, donc un remplacement antérieur peut être à nouveau mis en correspondance par un remplacement ultérieur. Elle est également sensible à la casse (utilisez str_ireplace() pour un remplacement insensible à la casse).

Préférez strtr() lorsque vous avez une liste fixe d'échanges qui doivent chacun se produire exactement une fois — échappement, translittération ou échanges bidirectionnels. Pour les remplacements basés sur des motifs, utilisez preg_replace() à la place.

Conclusion

La fonction strtr() offre un moyen efficace de traduire des sous-chaînes en PHP. Elle supporte à la fois la correspondance basée sur un tableau et la traduction caractère par caractère via la forme à trois arguments. Comme elle fonctionne en une seule passe avec une logique de correspondance la plus longue en premier, elle est bien adaptée aux échanges ponctuels et est souvent plus rapide que des appels str_replace() en chaîne. Comprendre les règles de passe unique et de correspondance la plus longue vous aide à choisir le bon outil pour chaque tâche de traitement de texte.

Pratique

Pratique
Quel est le rôle de la fonction strtr en PHP ?
Quel est le rôle de la fonction strtr en PHP ?
Was this page helpful?