我正在迁移一个应用程序以使用 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 );
但它不起作用。 大括号中关闭的标签未被替换。
我错过了什么?
答案 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 );