我認爲它不會與str_replace函數輕鬆地工作所以我要使用preg_replace
$data = array('title'=>'some title', 'date'=>1350498600, 'story'=>'Some story');
$template = "#title#, <br>#date(d)#<br> #date(m)#<br>#date(Y)#<br> #story#";
$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/', function ($match) use($data) {
$value = isset($data[$match[1]]) ? $data[$match[1]] : null;
if (!$value) {
// undefined variable in template throw exception or something ...
}
if (! empty($match[2]) && $match[1] == "date") {
$value = date($match[2], $value);
}
return $value;
}, $template);
而不是使用date(m)
或date(Y)
你也可以做這樣的事情 date(d-m-Y)
使用這個片段
這樣做的缺點是,你可以只格式化使用這種機制的date
變量。但通過一些調整,您可以擴展此功能。
注:如果使用低於5.3 PHP版本不能使用封閉,但你可以做到以下幾點:
function replace_callback_variables($match) {
global $data; // this is ugly
// same code as above:
$value = isset($data[$match[1]]) ? $data[$match[1]] : null;
if (!$value) {
// undefined variable in template throw exception or something ...
}
if (! empty($match[2]) && $match[1] == "date") {
$value = date($match[2], $value);
}
return $value;
}
$data = array('title'=>'some title', 'date'=>1350498600, 'story'=>'Some story');
$template = "#title#, <br>#date(d)#<br> #date(m)#<br>#date(Y)#<br> #story#";
// pass the function name as string to preg_replace_callback
$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/', 'replace_callback_variables', $template);
可以在PHP here
找到有關回調的詳細信息
這會讓你的模板引擎變慢。如果我是你,我會擁有一個簡單的替代模板引擎。 –
謝謝你的回答。你的建議呢? – alladeen