我不仅要替换简单变量,还要替换数组 变量。 有一个 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"] 的值。
如何用数组变量替换模板中的子字符串?
最佳答案
我无法用 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);
关于PHP用数组变量替换字符串中的{var ['key' ]},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45470152/