preg_replace / e和数组

时间:2010-09-09 16:18:22

标签: php arrays preg-replace

为什么这段代码不起作用?

$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei",  "$mx[('\\1')]",  $string );

输出必须像这样

vvv是vvvbar,baz是小部件

2 个答案:

答案 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);
}

这将用给定的值替换给定数组中的所有键。