strtr vs str_replace: cuándo usar diferentes funciones de reemplazo
En PHP, tanto las funciones strtr como str_replace pueden realizar reemplazos de cadenas. Sin embargo, elegir la función correcta depende de los requisitos y casos de uso específicos.
Contraste en el orden de reemplazo
Si bien el resultado resultante puede parecer idéntico en algunos casos, existe una diferencia sutil entre las dos funciones:
echo strtr('test string', 'st', 'XY'); // "YeXY XYring" echo str_replace(array('s', 't'), array('X', 'Y'), 'test string'); // "YeXY XYring"
strtr reemplaza las subcadenas de derecha a izquierda, mientras que str_replace reemplaza de izquierda a derecha. Esta diferencia se hace evidente al reemplazar subcadenas superpuestas:
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"
Reemplazar claves de matriz versus múltiples subcadenas
Otra distinción radica en cómo se manejan las matrices de reemplazo:
$arr = array("1" => "A", "2" => "B", "3" => "C"); echo strtr('123', $arr); // "ABC" echo str_replace(array_keys($arr), array_values($arr), '123'); // "ABC"
En este caso, ambas funciones reemplazan los caracteres con sus correspondientes valores de matriz. Sin embargo, strtr requiere una matriz asociativa con pares clave-valor, mientras que str_replace puede operar en matrices simples de subcadenas y reemplazos.
Prioridad de reemplazo
strtr prioriza los reemplazos según la longitud de la subcadena que se reemplaza, en orden descendente. Por el contrario, str_replace procesa los reemplazos en el orden definido en la matriz de reemplazo. Esto puede conducir a resultados diferentes, como lo demuestra el siguiente ejemplo:
$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"
En conclusión, tanto strtr como str_replace ofrecen diferentes enfoques para el reemplazo de cadenas en PHP. Comprender sus sutiles matices en el comportamiento y la sintaxis lo guiará a la hora de elegir la función adecuada para su caso de uso específico.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3