Otimizando a substituição de placeholder de string com RegEx
A função dynStr() tem como objetivo procurar e substituir variáveis de placeholder em uma determinada string, denotada por colchetes. Embora funcione corretamente, sua eficiência e simplicidade podem ser melhoradas.
Um problema importante com dynStr() reside em sua estrutura de array duplo para $matches. Usar dois loops foreach para acessar os dados desejados é ineficiente. Considere simplificar a expressão regular para extrair diretamente a variável de espaço reservado sem a necessidade de processamento adicional:
preg_match_all('/{\w }/', $str, $matches);
Próximo, o loop para substituir as variáveis de espaço reservado pode ser otimizado. A abordagem atual usa diversas operações de manipulação de strings e pesquisas de array, tornando-a desnecessariamente complexa:
foreach($match_group as $match) { // ... $str = ... }
Uma alternativa mais simples e concisa é usar uma única chamada de função, substituindo o espaço reservado diretamente:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
A função strtr() executa com eficiência múltiplas substituições, definindo um mapeamento entre as variáveis de espaço reservado e seus valores correspondentes no array $vars.
Além disso, a função pode se tornar insensível a maiúsculas e minúsculas convertendo as variáveis de espaço reservado e as chaves do array para letras minúsculas, eliminando a necessidade de processamento 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);
A incorporação dessas otimizações resulta em uma função dynStr() mais eficiente e simplificada:
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; }
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