3

わかりました、私はそのようなことをしようとしています:

preg_replace("/\{([a-zA-Z0-9_]+)\}/", $templateVariables[$1], $templateString);

今ではそれが不可能であることがわかりましたが、create_functionを使用しようとしたため、これを行う方法があるかどうかを知りたいのですが、$ templateVariablesはそれが含まれる関数のローカル変数であるため、 create_function内から$templateVariablesにアクセスできないため、ここで立ち往生しています。マッチを見つけて何を置き換えるかを考えてから、もう一度見つけて置き換える必要はありません。これはひどく非効率的です。とにかく、無名関数内からローカル変数にアクセスできるのでしょうか、それとも誰か良い提案がありますか?

ありがとう。

4

3 に答える 3

4

これを試して:

$vars = array(
    "test" => "Merry Christmas",
);
$string = "test {test} test";
$string = preg_replace_callback("/\{([a-zA-Z0-9_]+)\}/", function($match) use ($vars) {
    return isset($vars[$match[1]]) ? $vars[$match[1]] : $match[0];
}, $string);
echo $string;

次のように出力されます。

テストメリークリスマステスト

ここで実際の例を見ることができますhttp://codepad.viper-7.com/2ZNNYZ

于 2011-12-23T01:52:55.690 に答える
-1

実際には、preg_replaceを/e修飾子とともに使用できます。

preg_replace("/\{([a-zA-Z0-9_]+)\}/e", '$templateVariables[\'$1\']', $templateString)

しかし、それはここで最も安全な方法ではないかもしれません...

于 2011-12-23T01:51:40.563 に答える
-1

e regexp修飾子を使用する必要があります:

preg_replace("/\{([a-zA-Z0-9_]+)\}/e", "\$templateVariables['\\1']", $templateString);
于 2011-12-23T01:54:00.867 に答える