我试图重写此功能
<?php
$vars = array('id'=>$_SESSION['id'], 'name' => $_SESSION['username'],
'time' => $time->format('Y-m-d H:i:s');
$filename = "@name - @time";
echo preg_replace('/@(\w+)/e', '$vars["$1"]', $filename);
?>
到目前为止,这是我得到的地方
<?php
$vars = array('id'=>$_SESSION['id'], 'name' => $_SESSION['username'],
'time' => $time->format('Y-m-d H:i:s');
$filename = "@name - @time";
echo preg_replace_callback('/@(\w+)/', function ($matches) {return '$vars["$1"]';}, $filename);
?>
但这只显示我$vars["$1"] - $vars["$1"]
,所以我显然做错了什么。即使阅读完文档后我也不能理解我的所作所为。任何人都可以帮助我吗?
答案 0 :(得分:0)
请尝试以下操作,如果在@foo
中找不到索引foo
,则会保留$vars
。
您还需要使用use ($vars)
将$vars
导入回调函数范围。
echo preg_replace_callback('/@(\w+)/', function($matches) use ($vars) {
return isset($vars[$matches[1]]) ? $vars[$matches[1]] : '@'.$matches[1];
}, $filename);