⚡ 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?

  1. Passada Única: O strtr lê a string apenas uma vez.
  2. Longest Match First: Ele prioriza a substituição mais longa possível (evita bugs parciais).
  3. 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.

👉 Aprenda Aho-Corasick para buscas complexas