为什么这段代码不起作用?preg_replace/e和数组
$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei", "$mx[('\\1')]", $string);
输出必须喜欢这个
VVV是vvvbar,巴兹是小部件
为什么这段代码不起作用?preg_replace/e和数组
$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei", "$mx[('\\1')]", $string);
输出必须喜欢这个
VVV是vvvbar,巴兹是小部件
,因为你在preg_replace
使用双引号,PHP会尝试直接使用你的$mx
值,然后产生误差。 ..
只需逃脱$mx
,然后它会工作:
echo preg_replace("/(foo)/ei", "\$mx[('\\1')]", $string);
或者你也可以做到用单引号一样:
echo preg_replace("/(foo)/ei", '$mx[(\'\\1\')]', $string);
你preg_replace
使用双引号,这是由PHP解释。它看起来并不像你需要这样一个复杂的设置,因为这是一个简单的字符串替换,据我所知。一个简单的解决办法是:
$string = str_replace('foo', 'vvv', $string);
你可以使用你的阵列,也:
$replacements = array(
'foo' => 'vvv'
);
foreach ($replacements as $key => $replacement) {
$string = str_replace($key, $replacement, $string);
}
这将替换为关联值给定阵列中的所有键。
你可以将键/替换数组传递给'str_replace',那么你不需要使用'foreach'循环 – Laimoncijus 2010-09-09 16:33:39
但是这意味着两个数组,对吗?这在这里不是很方便,因为保持它们的同步是一件值得记住的事情。 – jwueller 2010-09-09 16:38:35
你仍然可以像你的例子那样拥有单个关联替换数组,只需获取键/值:'preg_replace(array_keys($ replacements),array_values($ replacements),$ string)' – Laimoncijus 2010-09-09 21:08:05
他的输出是不是'“$ mx [('foo')]是$ mx [('foo')] bar,baz是widgets”'then? – jwueller 2010-09-09 16:56:44