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

Php 用变量替换占位符的有效方法,php,Php,可能重复: 我有一个.txt文件作为模板。我制作了几个占位符,比如{{NAME},我想用变量替换它们。最有效的方法是什么?请记住,我的模板中大约有10个这样的占位符 没有比stru替换更好的方法了吗?怎么样 str_replace不仅难看,而且如果需要替换十个变量(进行二进制搜索,并从每个备选方案的开头开始),它的速度也很慢 而是使用a,或者一次列出所有10个变量,或者使用后期查找: $src = preg_replace_callback('/\{\{(\w+)}}/', 'replace_

可能重复:

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

没有比stru替换更好的方法了吗?

怎么样


str_replace
不仅难看,而且如果需要替换十个变量(进行二进制搜索,并从每个备选方案的开头开始),它的速度也很慢

而是使用a,或者一次列出所有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];
}

str_replace()
有什么难看的地方


您始终可以创建自己的函数,该函数围绕
str\u replace
展开,并可能将数组作为输入。这就是我要做的。你能用
str_replace()
解释实际问题吗?你想用变量或变量的内容替换它吗?和什么相比,它有多难看?也许你应该分享一些代码,你现在是怎么做的…@Felix Kling
str_replace
实际上可以将数组作为输入,因为4.3.3I想用变量的内容替换它。我现在做的是使用file_get_contents加载内容,我有一个数组,其中占位符作为键,设置值作为值。例如,模板引擎是如何做到这一点的?同样的方法?尝试:
$vars=array({{NAME}}=>{{VAR2}}',{{VAR2}}=>'Value 2'){{…}
格式的原因吗。为了防止它意外成为某个值?好吧,在代码示例中,您将再次替换替换项,使该原因变得毫无意义,您无法区分替换状态(a:=待替换;B:=替换)。
{{…}}
是针对状态A而不是B给出的。代码也将它们(部分)应用于状态B,这可能被视为导致意外甚至错误行为的缺陷。我的评论是作为一种保障。它可能在99.9%的情况下有效,但其余的呢?嗯。。。使用正则表达式而不是精确搜索?这似乎不是提升绩效的好方法……好吧,在提升绩效时,你应该看看实际的基准,而不是做出假设;)-PCRE经过高度优化,可以搜索替代方案。str_replace在内部使用循环“Regex总是比较慢”是这里最容易被误导的模因。不,等等,倒数第二。谢谢!这是一个很好的例子。当我不想使用stru替换时,我正在考虑性能。我听说速度很慢。我试试你的解决方案。谢谢你提供了这个简单而优雅的解决方案。
$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];
}
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);
}