php花括号替换值

时间:2015-11-13 19:31:10

标签: php curly-braces

我从来没用过php

中的大括号

但是,我正在更新一个存在的网站...

在数据库中,我有

等信息
YOUR NAME {CH_NAME} {URL_NAME}

我想检索信息并在适当的时候显示 我想将CH_NAME变量影响为值&与URL_NAME相同,并在最终显示完整信息中显示:

1-Normal:

$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

此致

3 个答案:

答案 0 :(得分:3)

只有您必须使用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 :(得分: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;

答案 2 :(得分:1)

使用字符串插值。您需要使用双引号分隔的字符串"。然后在你的大括号前加上一个美元符号:

echo "Hello ${NAME}";

括号不会为你做任何事情,因为以下内容也是如此:

echo "Hello $NAME";