我有一个.txt文件作为模板工作。我已经制作了几个像{{NAME}}
这样的占位符,我想用变量替换它们。最有效的方法是什么?请记住,我的模板中有大约10个占位符。
没有比str_replace更好的方法吗?
答案 0 :(得分:15)
$trans = array(
'{{NAME}}' => $name,
"{{AGE}}" => $age,
......
);
echo strtr($text, $trans);
答案 1 :(得分:7)
str_replace
不仅丑陋,而且如果你需要替换十个变量也会很迟钝(二元搜索是从每个替代品的开头开始)。
而是使用preg_replace_callback
,一次列出所有10个变量,或使用延迟查找:
$src = preg_replace_callback('/\{\{(\w+)}}/', 'replace_vars', $src);
# or (NAME|THING|FOO|BAR|FIVE|SIX|SVN|EGT|NNE|TEN)
function replace_vars($match) {
list ($_, $name) = $match;
if (isset($this->vars[$name])) return $this->vars[$name];
}
答案 2 :(得分:0)
str_replace()
有什么丑陋?
function replace_vars($string)
{
$vars = array('NAME'=>'Name', 'VAR2'=>'Value 2', 'VAR3'=>'Value 3');
$names = array();
foreach($vars as $name=>$var) {
$names[] = '{{'.$name.'}';
}
return str_replace($names, $vars, $string);
}
或
function replace_vars($string)
{
$vars = array('{{NAME}}'=>'Name', '{{VAR2}}'=>'Value 2', '{{VAR3}}'=>'Value 3');
return str_replace(array_keys($vars), $vars, $string);
}