Optimización de la sustitución de marcadores de posición de cadenas con RegEx
La función dynStr() tiene como objetivo buscar y reemplazar variables de marcador de posición en una cadena determinada, indicada por llaves. Si bien funciona correctamente, su eficiencia y simplicidad se pueden mejorar.
Un problema clave con dynStr() reside en su estructura de doble matriz para $matches. Usar dos bucles foreach para acceder a los datos deseados es ineficiente. Considere simplificar la expresión regular para extraer directamente la variable de marcador de posición sin necesidad de procesamiento adicional:
preg_match_all('/{\w }/', $str, $matches);
Siguiente, el bucle para reemplazar las variables de marcador de posición se puede optimizar. El enfoque actual utiliza varias operaciones de manipulación de cadenas y búsquedas de matrices, lo que lo hace innecesariamente complejo:
foreach($match_group as $match) { // ... $str = ... }
Una alternativa más simple y concisa es usar una única llamada a función, sustituyendo el marcador de posición directamente:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
La función strtr() realiza eficientemente múltiples reemplazos definiendo una asignación entre las variables de marcador de posición y sus valores correspondientes en la matriz $vars.
Además, la función se puede hacer que no distinga entre mayúsculas y minúsculas. al convertir tanto las variables de marcador de posición como las claves de la matriz a minúsculas, eliminando la necesidad de procesamiento adicional:
$allowed = array_keys(array_change_key_case($vars, CASE_LOWER)); ... $str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
La incorporación de estas optimizaciones da como resultado una función dynStr() más eficiente y optimizada:
function dynStr($str,$vars) { preg_match_all('/{\w }/', $str, $matches); foreach($matches[0] as $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } return $str; }
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