strtr vs str_replace: quando usar diferentes funções de substituição
Em PHP, as funções strtr e str_replace podem realizar substituições de strings. No entanto, a escolha da função correta depende de requisitos específicos e casos de uso.
Contraste no pedido de substituição
Embora a saída resultante possa parecer idêntica em alguns casos, há um diferença sutil entre as duas funções:
echo strtr('test string', 'st', 'XY'); // "YeXY XYring" echo str_replace(array('s', 't'), array('X', 'Y'), 'test string'); // "YeXY XYring"
strtr substitui substrings da direita para a esquerda, enquanto str_replace substitui da esquerda para a direita. Essa diferença fica evidente ao substituir substrings sobrepostas:
echo strtr('1 2 3 3', '1 2 3', 'XYZ'); // "1 2 3 Z" echo str_replace(array('1 2 3', '1 2'), array('XYZ', 'AB'), '1 2 3 3'); // "ABXYZ"
Substituindo chaves de matriz versus múltiplas substrings
Outra distinção está em como as matrizes de substituição são tratadas:
$arr = array("1" => "A", "2" => "B", "3" => "C"); echo strtr('123', $arr); // "ABC" echo str_replace(array_keys($arr), array_values($arr), '123'); // "ABC"
Neste caso, ambas as funções substituem os caracteres pelos valores correspondentes da matriz. No entanto, strtr requer uma matriz associativa com pares de valores-chave, enquanto str_replace pode operar em matrizes simples de substrings e substituições.
Prioridade de substituição
strtr prioriza substituições com base em o comprimento da substring que está sendo substituída, em ordem decrescente. Por outro lado, str_replace processa substituições na ordem definida na matriz de substituição. Isso pode levar a resultados diferentes, conforme demonstrado pelo exemplo a seguir:
$text = "PHP: Hypertext Preprocessor"; $text_strtr = strtr($text, array("PHP: Hypertext Preprocessor" => "PHP", "PHP" => "PHP: Hypertext Preprocessor")); $text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor"), array("PHP: Hypertext Preprocessor", "PHP"), $text); var_dump($text_strtr); // string(3) "PHP" var_dump($text_str_replace); // string(27) "PHP: Hypertext Preprocessor"
Concluindo, tanto strtr quanto str_replace oferecem abordagens diferentes para substituição de strings em PHP. Compreender suas nuances sutis de comportamento e sintaxe irá guiá-lo na escolha da função apropriada para seu caso de uso específico.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3