刚刚完成这个功能.基本上,假设查看字符串并尝试查找任何占位符变量,这些变量将位于两个大括号之间{}.它抓取大括号之间的值,并使用它来查看应与键匹配的数组.然后它用匹配键数组中的值替换字符串中的大括号变量.
但它有一些问题.首先是当var_dump($matches)它把它放在数组中的数组时.所以我必须使用两个foreach()只是达到正确的数据.
我也觉得它很沉重,我一直在寻找它,试图让它变得更好,但我有点难过.我错过了任何优化?
function dynStr($str,$vars) {
preg_match_all("/\{[A-Z0-9_]+\}+/", $str, $matches);
foreach($matches as $match_group) {
foreach($match_group as $match) {
$match = str_replace("}", "", $match);
$match = str_replace("{", "", $match);
$match = strtolower($match);
$allowed = array_keys($vars);
$match_up = strtoupper($match);
$str = (in_array($match, $allowed)) ? str_replace("{".$match_up."}", $vars[$match], $str) : str_replace("{".$match_up."}", '', $str);
}
}
return $str;
}
$variables = array("first_name"=>"John","last_name"=>"Smith","status"=>"won");
$string = 'Dear {FIRST_NAME} {LAST_NAME}, we wanted to tell you that you {STATUS} the competition.';
echo dynStr($string,$variables);
//Would …Run Code Online (Sandbox Code Playgroud) 我有一大堆内容被读入,它包含许多字符串{{some_text}},我正在尝试做的是找到所有这些出现并用数组中的另一个值替换它们$text["some_text"].
我已经尝试过使用preg_replace,但不确定如何在括号中找到找到的文本并在替换值中使用它.
$body = "This is a body of {{some_text}} text from a book.";
$text["some_text"] = "really cool";
$parsedBody = preg_replace("\[{].*[}]/U", $text[""], $body);
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,我试图some_text从字符串中获取文本并使用它来调用数组中的元素,这个例子非常基本,因为它的$body值非常大,并且它$text也有几百个元素.