以下にいくつかの方法を示します。
まずはstrtr()です。key=>value 配列を取り、出現するすべてのキーを値に置き換えます。
$values = array('name'=>'John','email'=>'blabla@gmail.com');
$text = "Welcome {name}, this is your email address: {email}";
$replacements = array();
foreach ($values as $name => $value) {
$replacements['{'.$name.'}'] = $value;
}
var_dump(strtr($text, $replacements));
2 番目の str_replace() は、$search 引数と $replace 引数の両方で配列をサポートします。
$values = array('name'=>'John','email'=>'blabla@gmail.com');
$text = "Welcome {name}, this is your email address: {email}";
$search = array_map(
function($placeholder) {
return '{'.$placeholder.'}';
},
array_keys($values)
);
var_dump(str_replace($search, $values, $text));
すべての {something} の発生を処理したい場合、3 番目のオプションは興味深いものです。これには正規表現とロジックが必要なため、preg_replace_callback が必要です。
$values = array('name'=>'John','email'=>'blabla@gmail.com');
$text = "Welcome {name}, this is your email address: {email}";
$replacer = function($match) use ($values) {
if (isset($values[$match['name']])) {
return $values[$match['name']];
} else {
return '';
}
};
var_dump(preg_replace_callback('(\\{(?P<name>[a-z\d]+)\\})i', $replacer, $text));