[英]PHP curly braces replace multiple values
我想将值 lara 某些单词放在大括号中。 但它给了我 $ 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} 的 colors 不同。
但它应该是这样的:
Apple 和 Orange 的 colors 不同。
你能告诉我我缺少什么以便我能得到正确的结果吗?
提前致谢..
您的正则表达式具有{
和}
元字符。 您无法按原样匹配它们。 你要么用反斜杠\
转义它,要么使用preg_quote()
。
您的代码非常冗长,带有循环。 您可以传递值数组以替换为目标值数组,而str_replace
可以很好地完成这项工作。
<?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]);
您还错过了将 $value1 和 $value2 传递给 function。 如果要替换多个值,我的建议是在数组中传递它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.