2013-12-23 50 views
1

我遷移應用與PHP 5.5工作preg_replace_callback,我需要從preg_replace函數功能去除/ E字符,要做到這一點我使用preg_replace_callback()preg_replace函數與數組作爲替換

我的實際功能是這樣的:

preg_replace ('#\{([a-z0-9\-_]*?)\}#Ssie' , '((isset($array[\'\1\'])) ? $array[\'\1\'] : \'\');' , $template); 

其中:

$模板包含一個html文件,像這樣的標籤E:{} USER_NAME

$陣列包含

$array['user_name'] = 'The user'; 

我一直在試圖將它轉換爲與PHP 5.5工作,沒有成功。

這是我做過什麼,到目前爲止:

return preg_replace_callback ('#\{([a-z0-9\-_]*?)\}#Ssi' , function ($array) { 
    return ((isset ($array[1])) ? $array[1] : ''); 
} , $template); 

,但它不工作。 大括號關閉的標籤不會被替換

我失蹤了什麼?

回答

1

您需要使用use關鍵字$array拉進你的匿名函數...

return preg_replace_callback ('#\{([a-z0-9\-_]*?)\}#Ssi' , function ($matches) use ($array) { 
    return ((isset ($array[$matches[1]])) ? $array[$matches[1]] : ''); 
} , $template); 
+0

非常感謝!完美的作品!我曾嘗試使用,但我想念這個:$ array [$ matches [1]] – Lucas