我有以下代码。
<?php
$user['username'] = 'Bastian';
$template = 'Hello {user:username}';
$template = preg_replace('/\{user\:([a-zA-Z0-9]+)\}/', $user['\1'], $template);
echo $template;
// Output:
// Notice: Undefined index: \1 in C:\xampp\htdocs\test.php on line 5
// Hello
我想,你知道我会做什么(我希望你知道)。 我尝试替换$ user ['$ 1'],$ user [“$ 1”]或$ user [$ 1],Nothing Works!
我希望你能帮助我=) 提前谢谢!
答案 0 :(得分:2)
您需要使用preg_replace_callback()
- preg_replace()
的替换是一个字符串,因此您无法在那里使用PHP代码。不,/e
修饰符不是解决方案,因为eval是邪恶的。
这是一个例子(它需要PHP 5.3,但你应该使用最新的版本!):
$user['username'] = 'FooBar';
$template = 'Hello {user:username}';
echo preg_replace_callback('/\{user\:([a-zA-Z0-9]+)\}/', function($m) use ($user) {
return $user[$m[1]];
}, $template);
如果您 使用旧的PHP版本,您可以这样做。由于使用了全局变量,它更加丑陋:
function replace_user($m) {
global $user;
return $user[$m[1]];
}
echo preg_replace_callback('/\{user\:([a-zA-Z0-9]+)\}/', 'replace_user', $template);
但是,考虑使用模板引擎,例如h2o,而不是自己实施。