2012-04-28 40 views
1

我有以下代码。preg_replace - 数组中的随机字

<?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!

我希望你能帮助我=) 先谢谢你!

回答

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

+0

非常感谢您^^ <?php $ user ['userID'] ='1'; $ user ['username'] ='FooBar'; function repl($ m) { \t global $ user; \t return $ user [$ m [1]]; } $ template ='你好{user:username}'; echo preg_replace_callback('/ \ {user \:([a-zA-Z0-9] +)\} /','repl',$ template); //输出: //你好FooBar Patrick 2012-04-28 12:46:46