Substituição em Massa: O Poder do strtr()
Por que usar strtr() é frequentemente mais rápido e seguro que str_replace() ou Regex para múltiplas substituições.
⚡ Substituição em Massa: strtr() vs O Resto
Quando precisamos substituir várias palavras em um texto (ex: censurar palavrões, trocar placeholders), a primeira reação é fazer um loop com str_replace ou criar uma Regex gigante.
Mas o PHP tem uma arma secreta antiga e extremamente otimizada: strtr com array.
🆚 O Comparativo
Imagine que você quer trocar "ruim" por "bom" e "feio" por "bonito".
1. O Jeito Comum (str_replace)
$texto = str_replace(
['ruim', 'feio'],
['bom', 'bonito'],
$texto
);
Problema: O str_replace processa o texto várias vezes (uma para cada busca). Se você trocar "A" por "B" e depois "B" por "C", o "A" original vira "C" (efeito cascata indesejado).
2. O Jeito Lento (Regex)
$texto = preg_replace(
['/ruim/', '/feio/'],
['bom', 'bonito'],
$texto
);
Problema: Regex tem overhead de compilação e é overkill para substituições literais.
3. O Jeito Hacker (strtr)
$texto = strtr($texto, [
'ruim' => 'bom',
'feio' => 'bonito'
]);
🏆 Por que strtr vence?
- Passada Única: O
strtrlê a string apenas uma vez. - Longest Match First: Ele prioriza a substituição mais longa possível (evita bugs parciais).
- Sem Cascata: Ele não substitui o que já foi substituído. Se trocar "A"->"B" e "B"->"C", o "A" vira "B" e para.
⚠️ Limitações
O strtr é perfeito para substituição direta. Mas se você precisa saber onde as palavras estão (índices) ou lidar com buscas mais complexas que envolvem estados, você precisa de um algoritmo como o Aho-Corasick.