2015-05-19 66 views
2

我使用preg_replace(){#page}替換爲變量$page的實際值。當然,我有很多的{#variable},不只是{#page}無法將preg_replace()與修飾符/ e轉換爲preg_replace_callback()

例如:

$uri = "module/page/{#page}"; 
$page = 3; 

//preg_replace that its working now 
$uri_to_call = $uri_rule = preg_replace('/\{\#([A-Za-z_]+)\}/e', "$$1", $uri); 

而我得到的結果

"module/page/3"; 

更新到PHP 5.4後,我得到的錯誤:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

而且我不知道如何改寫preg_replace()preg_replace_callback()

我已經嘗試從SO Replace preg_replace() e modifier with preg_replace_callback

像這樣遵循了答案:

public static function replace_vars($uri) { //$uri_rule = preg_replace('/\{\#([A-Za-z_]+)\}/e', "$$1", $uri); 
     return preg_replace_callback('/{\#([A-Za-z_]+)\}/', 
      create_function ('$matches', 'return $$matches[1];'), $uri); 

    } 

但我也得到一個警告:

Notice: Undefined variable: page

這實際上是真實的,因爲頁面變量是沒有設置運行時創建的功能。

任何人都可以幫助我嗎?

+0

@ Rizier123我相信,編輯後,這個問題的不重複 – ntan

+0

你的問題是,在你的匿名函數變量變量超出範圍 – Rizier123

+0

@ Rizier123我知道,和變量$網頁和所有其他是動態variables.So必有我的$值page.Thanks – ntan

回答

2

你的問題是你已經知道了,你的變量超出範圍在您的匿名功能,因爲你不知道哪一個,你會代替你不能將它們傳遞給函數,所以你必須使用在global關鍵字,例如

$uri = "module/page/{#page}"; 
$page = 3; 

$uri_to_call = $uri_rule = preg_replace_callback("/\{\#([A-Za-z_]+)\}/", function($m){ 
    global ${$m[1]}; 
    return ${$m[1]}; 
}); 
+0

它比你的建議非常非常複雜,但主要負責幫助@ntan不客氣我解決it.Thanks – ntan

+0

。 – Rizier123

相關問題