我不仅要替换简单变量,还要替换数组。 关于简单变量的替换有answer Alex Howansky:
$str = 'this is {TEST} a {THING} to test and a {array["key"]} var';
$TEST = 'one';
$THING = 'two';
$result = preg_replace('/\{([A-Z]+)\}/e', "$$1", $str);
{TEST}和{THING}的工作正常。
对于数组的调用变量变量,我需要${$array}['key']
(https://stackoverflow.com/a/20216265/1056384)。所以我试着做第二遍:
$result = preg_replace('/\{([a-z]+)\["([a-z]+)"\]\}/', "$\{$$1\}["$2"]", $result);
但是在输出中我得到字符串$\{$array\}["key"]
而不是$ array [“key”]的值。
如何用数组变量替换模板中的子串?
答案 0 :(得分:1)
我无法通过preg_replace
正确解析它,所以我使用了回调:
$str = 'this is {TEST} a {THING} to test and a {array["key"]} var';
$array['key'] = 'something';
$result = preg_replace_callback('/\{([a-z]+)\["([a-z]+)"\]\}/',
function($m) use($array){
return ${$m[1]}[$m[2]];
},
$str);
如果您不知道要传递给函数的数组的名称,您需要确保它在全局范围内定义,然后以这种方式访问它:
$result = preg_replace_callback('/\{([a-z]+)\["([a-z]+)"\]\}/',
function($m) {
${$m[1]} = $GLOBALS[$m[1]];
return ${$m[1]}[$m[2]];
},
$str);