preg_replace到preg_replace_callback,数组作为替换

时间:2013-12-23 15:36:11

标签: php arrays preg-replace preg-replace-callback

我正在迁移一个应用程序以使用 PHP 5.5 ,我需要从preg_replace函数中删除/ e字符,为此我正在使用preg_replace_callback()

我的实际功能如下:

preg_replace ( '#\{([a-z0-9\-_]*?)\}#Ssie' , '( ( isset($array[\'\1\']) ) ? $array[\'\1\'] : \'\' );' , $template );

其中:

$ template 包含一个包含以下标记的html文档: {user_name}

$ array 包含

$array['user_name'] = 'The user';

我一直在努力将其转换为使用PHP 5.5而不成功。

这是我到目前为止所做的:

return preg_replace_callback ( '#\{([a-z0-9\-_]*?)\}#Ssi' , function ( $array ) {
    return ( ( isset ( $array[1] ) ) ? $array[1] : '' );
} , $template );

但它不起作用。 大括号中关闭的标签未被替换

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您需要使用use关键字将$array引入您的匿名函数...

return preg_replace_callback ( '#\{([a-z0-9\-_]*?)\}#Ssi' , function ($matches) use ($array) {
    return ( ( isset ( $array[$matches[1]] ) ) ? $array[$matches[1]] : '' );
} , $template );