爲什麼這段代碼不起作用?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