我有这个代码,并且它在PHP 5.3以后工作正常但我需要从5.2.17开始运行它请任何人帮助我。
$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 = "";
$dataMatch = $data[$match[1]];
if (!isset($dataMatch)) {
// undefined variable in template throw exception or something ...
} else {
$value = $dataMatch;
}
if (! empty($match[2]) && $match[1] == "date") {
$value = date($match[2], $value);
}
return $value;
}, $template);
echo $result;
答案 0 :(得分:2)
首先命名你的替换函数并在回调之前定义它,记得将$data
作为全局来处理,因为它不会被preg_replace传递
function my_replace_function($match){
global $data;
$value = "";
$dataMatch = $data[$match[1]];
if (!isset($dataMatch)) {
// undefined variable in template throw exception or something ...
} else {
$value = $dataMatch;
}
if (! empty($match[2]) && $match[1] == "date") {
$value = date($match[2], $value);
}
return $value;
}
现在只需以字符串形式使用它的名称:
$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/','my_replace_function', $template);