PHP 用数组变量替换字符串中的 {var['key']}

PHP Replace {var['key']} in string with array variable

我不仅要替换简单变量,还要替换 array 变量。 有一个answer of 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', "$", $str);

{TEST} 和 {THING} 工作正常。

为了调用数组的变量变量,我需要 ${$array}['key'] ()。所以我试着做第二遍:

$result = preg_replace('/\{([a-z]+)\["([a-z]+)"\]\}/', "$\{$\}[""]", $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);