2011-05-11 103 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