是否有一个“问题”;Textmerge"-php的函数?
从包含一些文本(如合同)的数据库中读取Blob以填充变量数据。来自db的数据如下所示:是否有一个“问题”;Textmerge"-php的函数?,php,merge,Php,Merge,从包含一些文本(如合同)的数据库中读取Blob以填充变量数据。来自db的数据如下所示: "Bla bla <<Name>> Bla, Bla, <<Date>> BlaBla .... " “呜呜呜呜,呜呜呜呜……” 现在我想 $contract = merge( $rec['contract'], '<<','>>' array('Name' =>'Smith','Date'=>'2018-08-
"Bla bla <<Name>> Bla, Bla, <<Date>> BlaBla .... "
“呜呜呜呜,呜呜呜呜……”
现在我想
$contract = merge( $rec['contract'], '<<','>>' array('Name' =>'Smith','Date'=>'2018-08-08'));
$contract=merge($rec['contract'],'array('Name'=>'Smith','Date'=>'2018-08-08');
真的是我自己写的吗
我知道“eval”和双引号以及str_replace()在数组上循环,但我最终会有大约150个循环…str_replace()
可以接受要替换的字符串数组。这可能是你最好的选择
$contract=“布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉……”;
$contract=str_替换(['',['Joel','August,8'],$contract);
echo$合同;
我刚刚编写了一个简单的模板函数,它使用preg\u replace\u回调和零循环(php内部会循环,但代码本身不会):
为什么需要150个循环?最好使用某种形式的模板系统(我只使用了Twig)。可以使用preg\u replace\u callback()
来实现这一点。匹配regexp
,然后在数组中查找捕获组值。
$contract = "Bla bla <<Name>> Bla, Bla, <<Date>> BlaBla .... ";
$contract = str_replace(['<<Name>>', '<<Date>>'], ['Joel', 'August, 8'], $contract);
echo $contract;
<?php
function merge($template, $open, $close, $data){
// Escape the open and close tags
$open = preg_quote($open, '/');
$close = preg_quote($close, '/');
// Find the template strings and replace with data from our
// $data array where the key exists.
return preg_replace_callback(
"/{$open}(.*?){$close}/",
function($matches) use ($data){
// If the key exists in $data, return that as replacement
if(array_key_exists($matches[1], $data)){
return $data[$matches[1]];
} else {
// If the key doesn't exist, return the tag back so no replacement.
return $matches[0];
}
}, $template);
}
$template = "Bla bla <<Name>> Bla, Bla, <<Date>> BlaBla .... ";
$data = array('Name' =>'Smith','Date'=>'2018-08-08');
var_dump($template);
var_dump(merge($template, "<<", ">>", $data));
string(48) "Bla bla <<Name>> Bla, Bla, <<Date>> BlaBla .... "
string(47) "Bla bla Smith Bla, Bla, 2018-08-08 BlaBla .... "