Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个“问题”;Textmerge"-php的函数?_Php_Merge - Fatal编程技术网

是否有一个“问题”;Textmerge"-php的函数?

是否有一个“问题”;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-

从包含一些文本(如合同)的数据库中读取Blob以填充变量数据。来自db的数据如下所示:

"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 .... "