我有这样的文字:
$text = "Welcome {name}, this is your email address: {email}";
我想立即替换{name}和{email}标签,而不是使用str_replace("{name}","John",$text)
逐个替换
我已经有了这样的替换输出:
$values_to_replace = array('name'=>'John','email'=>'blabla@gmail.com');
如何使用给定的$values_to_replace
一次性重新整理整篇文字?
答案 0 :(得分:2)
由于您可以更改数组键以匹配要替换的文本,因此这很简单:
$values_to_replace = array('{name}'=>'John','{email}'=>'blabla@gmail.com');
$text = str_replace(array_keys($values_to_replace), $values_to_replace, $text);
或者正如塞巴斯蒂安所示。
要回答你的评论,有几种方式,Sébastien是一个。这是另一个:
$search = explode(',', '{'.implode('},{', array_keys($values_to_replace)).'}');
$text = str_replace($search, $values_to_replace, $text);
答案 1 :(得分:2)
以下是几种方式:
首先是strtr()。它需要一个key => value数组,并用键替换key的所有出现。
$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));
答案 2 :(得分:1)
str_replace
可以将数组作为参数:
$text = "Welcome {name}, this is your email address: {email}";
$from = array("{name}", "{email}");
$to = array("John", "blabla@gmail.com");
$new_text = str_replace( $from , $to, $text );