可能重複:
replace multiple placeholders with php?有效的方式來使用變量替換佔位符
我有一個.txt文件工作作爲模板。我製作了幾個佔位符,如{{NAME}}
,我想用變量替換它們。什麼是最有效的方法來做到這一點?請記住,我的模板中有大約10個佔位符。
沒有比str_replace更好的方法嗎?
可能重複:
replace multiple placeholders with php?有效的方式來使用變量替換佔位符
我有一個.txt文件工作作爲模板。我製作了幾個佔位符,如{{NAME}}
,我想用變量替換它們。什麼是最有效的方法來做到這一點?請記住,我的模板中有大約10個佔位符。
沒有比str_replace更好的方法嗎?
str_replace
不僅難看,而且低迷,如果你需要更換10個變量(做一個二進制搜索,並從一開始就開始對每個備選)。
而是使用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];
}
Ehm ...使用正則表達式而不是精確搜索?似乎並不是一種提升性能的好方法...... – Ivan
那麼,在提升性能時,您應該看看實際的基準測試,而不是推測;) - PCRE非常高度優化以尋找替代品。 str_replace在內部使用循環。 「正則表達式總是比較慢」是這裏最誤導的模因。其次,沒有等待。 – mario
謝謝!這是一個非常好的例子。當我不想使用str_replace時,我正在考慮性能。我聽說它很慢。我會嘗試你的解決方案。 – OptimusCrime
怎麼這麼難看約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);
}
你總是可以創建自己的功能,環繞'str_replace',也許需要一個數組作爲輸入。這就是我會做的。 –
你可以使用'str_replace()'來解釋* actual *問題嗎? – Phil
你想用變量或變量的內容來替換它嗎?它又是怎樣的醜陋 - 與什麼相比?也許你應該分享一些代碼,你現在怎麼做... – aurora