这里有几种方法:
首先是strtr()。它需要一个 key=>value 数组并将所有出现的 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));
第二个 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} 事件,第三个选项很有趣。这需要正则表达式和逻辑,因此需要 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));