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

标签 php regex replace preg-replace

我不仅要替换简单变量,还要替换数组 变量。 有一个 answerAlex 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/

相关文章:

java - 替换字符串数组中的特定字符串

javascript - 使用变量创建正则表达式模式以替换点

php - 从 PHP 发送一个值到 Node JS 执行

php - mysqli INSERT 查询不工作没有错误

java - 替换字符串中的重复子串

数字的正则表达式

javascript - 解析 'pip install' 命令以获取已安装软件包文本中的范围

javascript - 为什么我的字符串替换在 JavaScript 中不起作用?

php - JQGrid 使用 OnSelectRow 在另一个网格上加载数据

php - 无法增加/减少 php 中的重载对象或字符串偏移量