我有这段代码:
$bbcode = 'Users [user=1], [user=2] and [user=3] are friendly.';
echo preg_replace_callback(
'#\[user=(\d+)\]#',
function($matches) {
$userName = getUserNameByUserId($matches[1]);
return "<a href=user.php?id=$matches[1]>$userName</a>";
},
$bbcode
);
它仅适用于最后一个PHP版本。我想让它适用于PHP 5.2.17。
答案 0 :(得分:4)
是的,你可以:
function callback_function($matches) {
$userName = getUserNameByUserId($matches[1]);
return "<a href=user.php?id=$matches[1]>$userName</a>";
}
$bbcode = 'Users [user=1], [user=2] and [user=3] are friendly.';
echo preg_replace_callback(
'#\[user=(\d+)\]#',
'callback_function',
$bbcode
);
对于PHP 5.2.x,需要对函数定义略有不同,因此在调用pre_replace_callback之前定义它。然后以字符串的形式提供它的名称。
您可以在要运行代码的主机上另外升级PHP版本。 PHP 5.3比PHP 5.2快得多,甚至还没有实现。
答案 1 :(得分:0)
5.3版中引入了匿名函数,因此代码只能在5.3及更高版本中使用。
答案 2 :(得分:0)
如果你想要一个更简单的结构:
echo "Users ";
echo "<a href=\"user.php?id=1\">" . getUserNameByUserId(1) . "</a>";
echo ", ";
echo "<a href=\"user.php?id=2\">" . getUserNameByUserId(2) . "</a>";
echo " and ";
echo "<a href=\"user.php?id=3\">" . getUserNameByUserId(3) . "</a>";
echo " are friendly.";
答案 3 :(得分:0)
您可以使用preg_replace的'e'选项作为替代。
echo preg_replace('#\[user=(\d+)\]#e','"<a href=\"user.php?id=$1".getUserNameByUserId($1)."</a>"',$bbcode);