RegEx を使用した文字列プレースホルダー置換の最適化
関数 dynStr() は、指定された文字列内のプレースホルダー変数を検索して置換することを目的としています。中括弧。
dynStr() の重要な問題の 1 つは、$matches の二重配列構造にあります。目的のデータにアクセスするために 2 つの foreach ループを使用するのは非効率的です。正規表現を単純化して、さらなる処理を必要とせずにプレースホルダー変数を直接抽出することを検討してください。
preg_match_all('/{\w+}/', $str, $matches);
次に、プレースホルダー変数を置換するループを最適化できます。現在のアプローチでは、いくつかの文字列操作操作と配列検索を使用するため、不必要に複雑になります:
foreach($match_group as $match) { // ... $str = ... }
よりシンプルで簡潔な代替方法は、単一の関数呼び出しを使用し、プレースホルダーを直接置き換えることです:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
strtr() 関数は、プレースホルダー変数と $vars 内の対応する値の間のマッピングを定義することで、複数の置換を効率的に実行します。 array.
さらに、プレースホルダー変数と配列キーの両方を小文字に変換することで、関数の大文字と小文字を区別しないようにすることができ、追加の処理の必要がなくなります。
$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);
これらの最適化を組み込むより効率的で合理化された dynStr() 関数が生成されます:
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; }
以上が正規表現を使用して文字列プレースホルダー置換を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。