2012-11-02 49 views
0

我有这个代码,它的工作正常与PHP 5.3以上,但我需要运行它从5.2.17以上请任何人帮助我与此。preg_replace_callback与PHP 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

最新问题? –

+0

Stackoverflow不是免费的代码翻译服务。如果你懒得读文档 - 请雇人来为你做。 – zerkms

+0

'preg_replace_callback()'自PHP/4.0.5开始可用 –

回答

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); 
+0

Thankyou dev-null-dweller这是我想要的!工作完美。 – alladeen