PHP大括号替换多个值

PHP大括号替换多个值,php,Php,我想把某些单词的值放在花括号里。但结果给了我$str。因此,它向我显示了相同的单词,而没有进行任何替换 我试着这样做: function replace($Str){ preg_match_all('/{(\w+)}/', $Str, $matches); $afterStr = $Str; foreach ($matches[0] as $index => $var_name) { if (isset(${$matches[1][$index]})) {

我想把某些单词的值放在花括号里。但结果给了我$str。因此,它向我显示了相同的单词,而没有进行任何替换

我试着这样做:

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

$value1 = 'Apple';
$value2 = 'Orange';

$text = 'The colors of {value1} and {value2} are different.';

echo replace($text);
以上代码给出的结果

{value1}和{value2}的颜色不同。

但应该是这样的:

苹果和橙色的颜色不同。

你能告诉我我遗漏了什么以便我能得到正确的结果吗


提前感谢..

您的正则表达式有
{
}
元字符。你无法按原样匹配它们。您可以使用反斜杠
\
或使用
preg\u quote()
对其进行转义

你的代码有很多循环。您可以将要替换的值数组传递给目标值数组,并且可以很好地完成这项工作

<?php

function replace($Str,$values = []){ 
   preg_match_all('/\{(\w+)\}/', $Str, $matches);
   return str_replace($matches[0],$values,$Str);
}

$value1 = 'Apple';
$value2 = 'Orange';

$text = 'The colors of {value1} and {value2} are different.';

echo replace($text,[$value1,$value2]);

<代码>
$text!=$txt
作为开始。如果
replace($Str)
$value1
$value2
的值既没有传递到函数中,也没有传递到函数中,您将如何读取它们?@Tigger抱歉,这是我的键盘错误,我已经修复了它。您好@nec_dev,谢谢您的回答。很好,谢谢。因此,在你的答案中,重要的是思考$value1和$value2。如果$value1和$value2排名不正确,则单词输出将不同。例如,如果我编写了
echo replace($text,[$value2,$value1])那么结果可能是橙色和苹果的颜色不同。@Azzo很乐意帮忙。是的,当然顺序很重要。如果你想减少顺序,我们将不得不使用关联数组和循环。但是我写的代码中有什么缺陷或错误呢?@Azzo正如我在回答中解释的,
{
}
是具有regex含义的特殊正则字符。如果要将它们作为文字字符串进行匹配,则必须对其进行转义。另外,您没有将$value1和$value2传递给要替换的函数,因为在代码中,它们是全局变量。@Azzo