用变量替换占位符的有效方法

时间:2011-11-02 13:00:53

标签: php

  

可能重复:
  replace multiple placeholders with php?

我有一个.txt文件作为模板工作。我已经制作了几个像{{NAME}}这样的占位符,我想用变量替换它们。最有效的方法是什么?请记住,我的模板中有大约10个占位符。

没有比str_replace更好的方法吗?

3 个答案:

答案 0 :(得分:15)

strtr

怎么样?
$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);
}