我有一大堆内容被读入,它包含许多字符串,如{{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);
正如您所看到的,我正在尝试从字符串中获取some_text
文本并使用它来调用数组中的元素,此示例非常基本,因为$body
值非常大更大,$text
也有几百个元素。
答案 0 :(得分:5)
您可以使用preg_replace_callback
并使用捕获组([^}]+)
在数组$text
中查找索引:
$repl = preg_replace_callback('/{{([^}]+)}}/', function ($m) use ($text) {
return $text[$m[1]]; }, $body);
//=> This is a body of really cool text from a book.
use ($text)
语句将$text
的引用传递给匿名function
。
答案 1 :(得分:2)
如何以相反的方式执行此操作 - 而不是查找所有{{...}}
占位符并查找其值,迭代所有值并替换匹配的占位符,如下所示:
foreach ($text as $key => $value) {
$placeholder = sprintf('{{%s}}', $key);
$body = str_replace($placeholder, $value, $body);
}
你甚至可以把它包装成一个函数:
function populatePlaceholders($body, array $vars)
{
foreach ($vars as $key => $value) {
$placeholder = sprintf('{{%s}}', $key);
$body = str_replace($placeholder, $value, $body);
}
return $body;
}
答案 2 :(得分:0)
只是为了好玩,按原样使用你的数组:
$result = str_replace(array_map(function($v){return '{{'.$v.'}}';}, array_keys($text)),
$text, $body);
或者,如果您的数组类似于$text['{{some_text}}']
,那么只需:
$result = str_replace(array_keys($text), $text, $body);