【问题标题】:php curly braces replace valuesphp花括号替换值
【发布时间】:2015-11-13 19:31:10
【问题描述】:

我之前在php中从未使用过大括号

但是我正在更新一个现有的网站...

在数据库中,我有诸如在

中的信息
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

问候

【问题讨论】:

  • 你应该搜索模板软件,它会自动做这样的事情。
  • 花括号在字符串中没有任何特殊含义。它们可以在字符串 literals 中使用,例如 $beforeStr="YOUR NAME {$CH_NAME}";。但是,如果您从数据库中获取字符串,则没有替换。

标签: php curly-braces


【解决方案1】:

只有你必须使用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;

【讨论】:

    【解决方案2】:

    如果你真的想使用花括号,试试这个。所有替换都将自动完成,仅来自匹配的变量名。

    $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;
    

    【讨论】:

    • 感谢 Max Zuber,甚至认为这是我做 str 替换的第一个想法,我做到了,但使用数组中的特定值,你的动态正则表达式解决方案是迄今为止最好的
    【解决方案3】:

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

    echo "Hello ${NAME}";
    

    不过,大括号并没有真正为您做任何事情,因为以下内容也可以:

    echo "Hello $NAME";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多