Optimisation du remplacement des variables dans les chaînes
Votre fonction, dynStr, destinée à remplacer les variables d'espace réservé entre accolades, peut être améliorée pour une meilleure efficacité et un fonctionnement plus simple. Voici quelques observations importantes et suggestions d'optimisation :
Résultats du tableau imbriqué :
Pour accéder aux correspondances réelles, vous utilisez actuellement deux boucles foreach en raison de l'imbrication nature du tableau $matches. Pensez à utiliser preg_match() à la place, qui peut afficher directement les correspondances au lieu d'un tableau :
preg_match('/\{[A-Z0-9_]+\}/', $str, $matches);
Insensibilité à la casse :
Votre code suppose que les noms de variables sont toujours en majuscules. Si des noms de variables sont en casse mixte, ils ne seront pas remplacés. Pensez à utiliser preg_replace_callback() avec un rappel qui gère à la fois les variables majuscules et minuscules :
preg_replace_callback('/\{[A-Za-z0-9_]+\}/', function ($match) { return $this->exists($match[0]) ? $this->getValue(strtolower(substr($match[0], 1, -1))) : ''; }, $string);
Optimisation du remplacement de chaîne :
Au lieu d'effectuer plusieurs remplacements pour chaque correspondance, il est plus efficace d'utiliser str_replace() une fois avec un tableau de remplacements :
$replacements = array_map(function ($key) use ($vars) { return $vars[strtolower($key)]; }, array_keys($vars)); str_replace(array_keys($replacements), array_values($replacements), $string);
Envisagez d'utiliser cette approche optimisée :
function dynStr($str, $vars) { $pattern = '/\{[A-Za-z0-9_]+\}/'; return preg_replace_callback($pattern, function ($match) use ($vars) { return $vars[strtolower(substr($match[0], 1, -1))]; }, $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!