php花括号替换值[重复]

piah890a  于 8个月前  发布在  PHP
关注(0)|答案(4)|浏览(85)

此问题在此处已有答案

PHP replace string between curly brackets with array element value(3个答案)
Replacing Placeholder Variables in a String(6个回答)
7天前关闭
我以前在php中从来没有用过花括号
不过,我正在更新一个现有的网站…
在数据库中,我有这样的信息,

YOUR NAME {CH_NAME} {URL_NAME}

字符串
我想检索的信息,并显示在适当的我想影响CH_NAME变量的值和相同的URL_NAME,并在最后显示完整infrmation这样:
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


问候

c9x0cxw0

c9x0cxw01#

只需要使用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;

7z5jn7bk

7z5jn7bk2#

如果你真的想使用花括号,试试这个。所有的替换都会自动完成,只需要从匹配的变量名开始。

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

字符串

rjjhvcjd

rjjhvcjd3#

这里有一个简单的函数可以帮助你。这个函数来自Yii::t()函数。

function replace_placeholder($message, $params = [])
{
    $placeholders = [];
    foreach ((array) $params as $name => $value) {
        $placeholders['{' . $name . '}'] = $value;
    }
    return ($placeholders === []) ? $message : strtr($message, $placeholders);
}

字符串
下面是如何使用该功能,

$beforeStr="YOUR NAME {CH_NAME} {URL_NAME}";
$values = ['CH_NAME'=>"John",'URL_NAME'=>"http://xxxx"];

echo replace_placeholder($beforeStr,$values);


完整的例子在这里

<?php
function replace_placeholder($message, $params = [])
{
    $placeholders = [];
    foreach ((array) $params as $name => $value) {
        $placeholders['{' . $name . '}'] = $value;
    }
    return ($placeholders === []) ? $message : strtr($message, $placeholders);
}

$beforeStr="YOUR NAME {CH_NAME} {URL_NAME}";
$values = ['CH_NAME'=>"John",'URL_NAME'=>"http://xxxx"];

echo replace_placeholder($beforeStr,$values);

qoefvg9y

qoefvg9y4#

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

echo "Hello ${NAME}";

字符串
大括号实际上并没有为你做任何事情,因为下面的工作也是如此:

echo "Hello $NAME";

相关问题