ホームページ  >  記事  >  バックエンド開発  >  文字列内のプレースホルダー変数を効率的に置換するにはどうすればよいですか?

文字列内のプレースホルダー変数を効率的に置換するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-23 07:05:10250ブラウズ

How Can I Efficiently Replace Placeholder Variables in a String?

「文字列内のプレースホルダー変数の置換」の最適化

文字列内のプレースホルダー変数の識別と置換が重要となるさまざまなシナリオに遭遇する可能性があります。このコード スニペットは、中括弧 ({}) で囲まれたキーと値のペアを見つけて、それに応じて更新する動的置換関数 dynStr を示しています。

function dynStr($str,$vars) {
    preg_match_all("/\{[A-Z0-9_]+\}+/", $str, $matches);
    foreach($matches as $match_group) {
        foreach($match_group as $match) {
            $match = str_replace("}", "", $match);
            $match = str_replace("{", "", $match);
            $match = strtolower($match);
            $allowed = array_keys($vars);
            $match_up = strtoupper($match);
            $str = (in_array($match, $allowed)) ? str_replace("{".$match_up."}", $vars[$match], $str) : str_replace("{".$match_up."}", '', $str);
        }
    }
    return $str;
}

$variables = array("first_name" => "John","last_name" => "Smith","status" => "won");
$string = 'Dear {FIRST_NAME} {LAST_NAME}, we wanted to tell you that you {STATUS} the competition.';
echo dynStr($string,$variables); // Would output: 'Dear John Smith, we wanted to tell you that you won the competition.'

ただし、著者が強調しているように、この実装には冗長性があります。配列へのアクセスが必要であり、計算量が多いと思われます。正規表現の使用を排除し、「vars」配列内のキーと値のペアに基づいて単純な文字列置換を実装することで、このプロセスを合理化できます。

$variables = array("first_name" => "John","last_name" => "Smith","status" => "won");
$string = 'Dear {FIRST_NAME} {LAST_NAME}, we wanted to tell you that you {STATUS} the competition.';

foreach($variables as $key => $value){
    $string = str_replace('{'.strtoupper($key).'}', $value, $string);
}

echo $string; // Dear John Smith, we wanted to tell you that you won the competition.

このアプローチでは、不必要なネストされた配列の走査が削除され、置換プロセスを合理化し、よりクリーンで効率的なコードを実現します。

以上が文字列内のプレースホルダー変数を効率的に置換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。