为什么这段代码不起作用?
$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei", "$mx[('\\1')]", $string );
输出必须像这样
vvv是vvvbar,baz是小部件
答案 0 :(得分:3)
因为您在preg_replace
中使用双引号,PHP会尝试直接使用您的$mx
值,这会产生错误...
只需逃离$mx
,然后就可以了:
echo preg_replace("/(foo)/ei", "\$mx[('\\1')]", $string );
或者您可以使用单引号执行相同的操作:
echo preg_replace("/(foo)/ei", '$mx[(\'\\1\')]', $string );
答案 1 :(得分:0)
您的preg_replace
使用双引号,由PHP解释。它看起来不像你需要这么复杂的设置,因为这是一个简单的字符串替换,据我所见。一个更简单的解决方案是:
$string = str_replace('foo', 'vvv', $string);
你也可以使用你的阵列:
$replacements = array(
'foo' => 'vvv'
);
foreach ($replacements as $key => $replacement) {
$string = str_replace($key, $replacement, $string);
}
这将用给定的值替换给定数组中的所有键。