Optimisation de la substitution d'espace réservé de chaîne avec RegEx
La fonction dynStr() vise à rechercher et remplacer des variables d'espace réservé dans une chaîne donnée, notée accolades. Bien qu'il fonctionne correctement, son efficacité et sa simplicité peuvent être améliorées.
Un problème clé avec dynStr() réside dans sa structure à double tableau pour $matches. Utiliser deux boucles foreach pour accéder aux données souhaitées est inefficace. Pensez à simplifier l'expression régulière pour extraire directement la variable d'espace réservé sans avoir besoin d'un traitement supplémentaire :
preg_match_all('/{\w+}/', $str, $matches);
Ensuite, la boucle pour remplacer les variables d'espace réservé peut être optimisée. L'approche actuelle utilise plusieurs opérations de manipulation de chaînes et de recherches de tableaux, ce qui la rend inutilement complexe :
foreach($match_group as $match) { // ... $str = ... }
Une alternative plus simple et plus concise consiste à utiliser un seul appel de fonction, en remplaçant directement l'espace réservé :
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
La fonction strtr() effectue efficacement plusieurs remplacements en définissant un mappage entre les variables d'espace réservé et leurs valeurs correspondantes dans les $vars tableau.
De plus, la fonction peut être rendue insensible à la casse en convertissant à la fois les variables d'espace réservé et les clés du tableau en minuscules, éliminant ainsi le besoin de traitement supplémentaire :
$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);
Intégrer ces optimisations se traduit par une fonction dynStr() plus efficace et rationalisée :
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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!