PHP大括号替换多个值
我想把某些单词的值放在花括号里。但结果给了我$str。因此,它向我显示了相同的单词,而没有进行任何替换 我试着这样做: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]})) {
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