2015-11-13 163 views
0

我從來沒有在PHPPHP大括號替換值

但是我更新的existant網站花括號之前使用...

在數據庫中,我有信息,如

YOUR NAME {CH_NAME} {URL_NAME} 

我想檢索信息並在適當的地方顯示它 我希望影響CH_NAME變量的值爲&與URL_NAME相同,並在最終顯示完整信息的情況下:

1 - 正常:

$beforeStr="YOUR NAME {CH_NAME} {URL_NAME}"; 
$CH_NAME="John"; 
$URL_NAME="http://xxxx"; 

echo $beforeStr ; //would like to show : YOUR NAME John http://xxxx 

問候

+0

您要搜索的模板軟件,它會自動做這樣的事情。 – Barmar

+0

大括號在字符串中沒有任何特殊含義。它們可以在字符串**文字**中使用,如'$ beforeStr =「您的姓名{$ CH_NAME}」;'。但是,如果你從數據庫中獲取字符串,則不會進行替換。 – Barmar

回答

1

如果你真的想花使用大括號,試試這個。所有替換都將自動完成,只需從匹配的變量名稱即可完成。

$CH_NAME = "John"; 
$URL_NAME = "http://xxxx"; 
$beforeStr = "YOUR NAME {CH_NAME} {URL_NAME}"; 

preg_match_all('/{(\w+)}/', $beforeStr, $matches); 
$afterStr = $beforeStr; 
foreach ($matches[0] as $index => $var_name) { 
    if (isset(${$matches[1][$index]})) { 
    $afterStr = str_replace($var_name, ${$matches[1][$index]}, $afterStr); 
    } 
} 

echo $afterStr; 
+0

感謝Max Zuber,即使這是我的第一個想法做str替換,我做了它,但與數組中的指定值,你動態正則表達式解決方案是最好的 – Krasic

2

只有你必須使用str_replace

$beforeStr="YOUR NAME {CH_NAME} {URL_NAME}"; 

$CH_NAME="John"; 
$URL_NAME="http://xxxx"; 
$OTHER = "OTHER"; 

$beforeStr = str_replace(
array('{CH_NAME}','{URL_NAME}','{OTHER}'), 
array($CH_NAME,$URL_NAME,$OTHER), 
$beforeStr); 

echo $beforeStr ; 

另一種方式是:

$beforeStr = "YOUR NAME {CH_NAME} {URL_NAME} - {OTHER} "; 

$variables = array(
    'CH_NAME'=>'John', 
    'URL_NAME'=>'http://xxxx', 
    'OTHER'=>'other' 
); 
//if var exist then replace 
$response = preg_replace_callback('/{(.+?)}/ix',function($match)use($variables){ 
    return !empty($variables[$match[1]]) ? $variables[$match[1]] : $match[0]; 
},$beforeStr); 

echo $response; 
1

使用字符串插值。您需要使用雙引號分隔字符串"。然後,只需您的前綴括號美元符號:

echo "Hello ${NAME}"; 

大括號真的不爲你做任何事,雖然,如下面的工作太:

echo "Hello $NAME";