2011-05-11 106 views
4

我有一個這樣的字符串:使用的preg_replace向後引用數組鍵和替換值

http://mysite.com/script.php?fruit=apple 

而且我有一個關聯數組是這樣的:

$fruitArray["apple"] = "green"; 
$fruitArray ["banana"] = "yellow"; 

我想使用preg_replace函數的字符串,用鑰匙在數組中後引用蘋果和綠色取代它,像這樣:

$string = preg_replace('|http://mysite.com/script.php\?fruit=([a-zA-Z0-9_-]*)|', 'http://mysite.com/'.$fruitArray[$1].'/', $string); 

該過程應該返回

http://mysite.com/green/ 

顯然這不適用於我;我如何操作preg_replace語句中的$fruitArray[$1],以便識別PHP,反引用並用綠色代替?

謝謝!

回答

5

您需要使用/e eval標誌,或者如果您可以保留幾行preg_replace_callback

$string = preg_replace(
    '|http://mysite.com/script.php\?fruit=([a-zA-Z0-9_-]*)|e', 
    ' "http://mysite.com/" . $fruitArray["$1"] ', 
    $string 
); 

請注意整個URL連接表達式是如何用單引號引起來的。它將在稍後解釋爲PHP表達式,空格將消失,並且靜態URL字符串將與fruitArray中的任何內容串聯起來。

+0

非常好!你的代碼工作完美。非常感謝,爲我節省了幾個小時的頭部劃傷! – Matt 2011-05-12 00:02:37

+1

請注意,'e'修飾符已折舊:http://php.net/manual/en/migration55.deprecated.php – patrick 2014-11-05 13:49:43