W3docs

strtr()

La funzione strtr() in PHP traduce caratteri e sottostringhe in una stringa, utile per elaborazione di testo e sostituzioni efficienti.

Introduzione

La funzione strtr() in PHP traduce sottostringhe all'interno di una stringa. È particolarmente utile per l'elaborazione di testo in cui sequenze specifiche devono essere sostituite in modo efficiente. Questo articolo ne illustra la sintassi, il comportamento e l'utilizzo pratico.

Comprendere la funzione strtr()

La funzione strtr() supporta due firme:

Firma con array

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

Qui, $str è la stringa di input e $replace è un array associativo che mappa le sottostringhe con le loro sostituzioni. La funzione sostituisce tutte le occorrenze delle chiavi con i valori corrispondenti.

Firma a tre argomenti

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

In questa forma, $from e $to devono avere la stessa lunghezza. Ogni carattere in $from viene mappato al carattere nella stessa posizione in $to.

Comportamento importante: strtr() sostituisce le sottostringhe usando un algoritmo che privilegia la corrispondenza più lunga. Ciò significa che i pattern sovrapposti vengono risolti dando priorità alla corrispondenza più lunga, e le sostituzioni non vengono applicate ricorsivamente all'output.

Forma con array: sostituzione di sottostringhe

L'uso più comune di strtr() è la forma a due argomenti con array. Si passa un array associativo che mappa ogni sottostringa da cercare al valore con cui deve essere sostituita.

php— editable, runs on the server

Qui strtr() sostituisce ogni "H" con "J" e ogni "W" con "Z". Le chiavi possono avere qualsiasi lunghezza, quindi è possibile mappare parole intere con la stessa facilità dei singoli caratteri:

<?php

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

Le sostituzioni vengono applicate in un unico passaggio

Questo è il comportamento che crea confusione. strtr() analizza la stringa una sola volta e non riesamina mai il testo già sostituito. Quindi un valore inserito non verrà nuovamente abbinato da un'altra regola:

<?php

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

Il "Hi" diventa "Hello", ma quel nuovo "Hello" non viene poi trasformato in "hi" dalla seconda regola — la sostituzione non è ricorsiva. Questo rende strtr() sicuro per scambiare due valori contemporaneamente (ad esempio "yes" <-> "no"), operazione che str_replace() non può eseguire in una singola chiamata.

Vince la corrispondenza più lunga

Quando due chiavi potrebbero corrispondere nella stessa posizione, strtr() preferisce sempre quella più lunga:

<?php

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

Anche se "a" appare prima nell'array, la chiave più lunga "a b" corrisponde in quella posizione e ha la priorità. L'ordine dell'array non ha importanza — conta solo la lunghezza della chiave.

Forma a tre argomenti: traduzione carattere per carattere

La forma a tre argomenti mappa i singoli caratteri. $from e $to devono avere la stessa lunghezza; ogni carattere in $from viene sostituito dal carattere nella stessa posizione in $to.

<?php

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

Ogni l diventa L e ogni o diventa O. Se $from è più lungo di $to, i caratteri in eccesso vengono ignorati. Questa forma è utile per semplici scambi simili a cifrari o per normalizzare i caratteri, ma può sostituire solo singoli caratteri — usare la forma con array quando è necessario sostituire sottostringhe di più caratteri.

strtr() vs str_replace()

Entrambe le funzioni sostituiscono testo, ma si comportano in modo diverso:

  • strtr() opera in un unico passaggio non ricorsivo e risolve i conflitti per corrispondenza più lunga. Il testo sostituito non viene mai riesaminato.
  • str_replace() applica le sue regole in sequenza, quindi una sostituzione precedente può essere nuovamente abbinata da una successiva. È anche case-sensitive (usare str_ireplace() per la sostituzione senza distinzione tra maiuscole e minuscole).

Scegliere strtr() quando si dispone di una mappa fissa di scambi che devono avvenire ciascuno esattamente una volta — escape, traslitterazione o scambi bidirezionali. Per la sostituzione basata su pattern, usare invece preg_replace().

Conclusione

La funzione strtr() offre un modo efficiente per tradurre sottostringhe in PHP. Supporta sia la mappatura basata su array che la traduzione carattere per carattere tramite la forma a tre argomenti. Poiché opera in un unico passaggio utilizzando la logica della corrispondenza più lunga, è adatta agli scambi una tantum ed è spesso più veloce delle chiamate concatenate a str_replace(). Comprendere le regole del passaggio singolo e della corrispondenza più lunga aiuta a scegliere lo strumento giusto per ogni attività di elaborazione del testo.

Pratica

Pratica
Qual è lo scopo della funzione strtr in PHP?
Qual è lo scopo della funzione strtr in PHP?
Was this page helpful?