【发布时间】:2010-09-09 16:18:21
【问题描述】:
为什么这段代码不起作用?
$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei", "$mx[('\\1')]", $string );
输出必须是这样的
vvv 是 vvvbar,baz 是小部件
【问题讨论】:
标签: 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 是小部件
【问题讨论】:
标签: php arrays preg-replace
因为您在preg_replace 中使用了双引号,PHP 会尝试直接使用您的$mx 值,这会产生错误...
只需转义$mx,然后它就会工作:
echo preg_replace("/(foo)/ei", "\$mx[('\\1')]", $string );
或者你也可以使用单引号来做同样的事情:
echo preg_replace("/(foo)/ei", '$mx[(\'\\1\')]', $string );
【讨论】:
"$mx[('foo')] is $mx[('foo')]bar, baz is widgets"吗?
您的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 循环
preg_replace(array_keys($replacements), array_values($replacements), $string)