Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Php 超基本模板系统_Php_Templates - Fatal编程技术网

Php 超基本模板系统

Php 超基本模板系统,php,templates,Php,Templates,我希望能够使用以下方案用正则表达式替换文件中的内容: 我有一个数组: $data = array( 'title' => 'My Cool Title', 'content' => '' ) 我还有一个模板(为了清楚起见,我们假设下面的内容被分配给变量$template) 我希望能够使用一个正则表达式来完成整个过程,因此它可以尽可能通用;以下是我的尝试(不起作用) $endMarkup=preg_replace(“/”,$data[“\\1”],$template);

我希望能够使用以下方案用正则表达式替换文件中的内容:

我有一个数组:

$data = array(
  'title' => 'My Cool Title',
  'content' => ''
)
我还有一个模板(为了清楚起见,我们假设下面的内容被分配给变量$template)


我希望能够使用一个正则表达式来完成整个过程,因此它可以尽可能通用;以下是我的尝试(不起作用)

$endMarkup=preg_replace(“/”,$data[“\\1”],$template);

有没有一个干净的解决方案可以通过数组索引将关联数组数据放入模板中?

只需一个
preg\u replace
调用即可:

$replacements = array();
foreach ($data as $search => $replacement) {
   $replacements["/<% $search %>/"] = $replacement;
}
$endMarkup = preg_replace(
     array_keys($replacements), 
     array_values($replacements), 
     $template);
$replacements=array();
foreach($search=>$replacement形式的数据){
$replacements[“/”]=$replacements;
}
$endMarkup=preg\u replace(
数组_键($replacements),
数组_值($replacements),
$模板);

只要做一点准备工作,您就可以通过一个
preg\u replace
调用:

$replacements = array();
foreach ($data as $search => $replacement) {
   $replacements["/<% $search %>/"] = $replacement;
}
$endMarkup = preg_replace(
     array_keys($replacements), 
     array_values($replacements), 
     $template);
$replacements=array();
foreach($search=>$replacement形式的数据){
$replacements[“/”]=$replacements;
}
$endMarkup=preg\u replace(
数组_键($replacements),
数组_值($replacements),
$模板);
您可以使用。以下是我的做法:

function get_data($matches) {
    global $data;

    return $data[$matches[1]];
}

$endMarkup = preg_replace_callback('/<% ([a-z]+) %>/', 'get_data', $template);
函数获取数据($matches){
全球美元数据;
返回$data[$matches[1]];
}
$endMarkup=preg_replace_回调('/','get_data',$template);
或者,如果您愿意,可以使用以下命令:

$endMarkup = preg_replace_callback('/<% ([a-z]+) %>/', create_function('$matches', 'global $data; return $data[$matches[1]];'), $template);
$endMarkup=preg_replace_回调('/',create_函数('$matches','global$data;return$data[$matches[1]];'),$template);
您可以使用。以下是我的做法:

function get_data($matches) {
    global $data;

    return $data[$matches[1]];
}

$endMarkup = preg_replace_callback('/<% ([a-z]+) %>/', 'get_data', $template);
函数获取数据($matches){
全球美元数据;
返回$data[$matches[1]];
}
$endMarkup=preg_replace_回调('/','get_data',$template);
或者,如果您愿意,可以使用以下命令:

$endMarkup = preg_replace_callback('/<% ([a-z]+) %>/', create_function('$matches', 'global $data; return $data[$matches[1]];'), $template);
$endMarkup=preg_replace_回调('/',create_函数('$matches','global$data;return$data[$matches[1]];'),$template);

如果愿意,您可以尝试不使用正则表达式。str_replace函数就是为此而创建的。如果你不懂正则表达式,这将是你最好的选择

测试数据:

$data = array(
  'title' => 'My Cool Title',
  'content' => ''
);

$file = <<< EOF
<html>
<title><% title %></title>
<body><% content %></body>
</html>
EOF;
$data=array(
“标题”=>“我的酷标题”,
“内容”=>“
);

$file=如果愿意,可以尝试不使用正则表达式。str_replace函数就是为此而创建的。如果你不懂正则表达式,这将是你最好的选择

测试数据:

$data = array(
  'title' => 'My Cool Title',
  'content' => ''
);

$file = <<< EOF
<html>
<title><% title %></title>
<body><% content %></body>
</html>
EOF;
$data=array(
“标题”=>“我的酷标题”,
“内容”=>“
);

$file=为什么要费心做模板呢?PHP已经是一种模板语言。除非您试图排除代码执行的可能性,否则您所需要的一切都将内置到该语言中


您可以使用带有短标记的普通PHP编写模板。您可以将其全部封装在一个函数中,以稍微限制变量范围。您可以使用
import()
从数组中获取少量变量。您可以使用
include
require()
来处理向文件中加载、解析和插入值的操作。您可以使用输出缓冲(
ob_start()
/
ob_end()
)来处理在字符串中捕获输出的操作。所有的东西都是内置的、快速的、彻底的测试。

你为什么要费心模板呢?PHP已经是一种模板语言。除非您试图排除代码执行的可能性,否则您所需要的一切都将内置到该语言中


您可以使用带有短标记的普通PHP编写模板。您可以将其全部封装在一个函数中,以稍微限制变量范围。您可以使用
import()
从数组中获取少量变量。您可以使用
include
require()
来处理向文件中加载、解析和插入值的操作。您可以使用输出缓冲(
ob_start()
/
ob_end()
)来处理在字符串中捕获输出的操作。一切都是内置的、快速且经过彻底测试的。

使用此方法,您只需使用str_replace()。绝对可以。我可能会选择$replacements[“//I”]=$replacement;如果你不能验证或担保标题,你应该使用preg_quote。打印(数组(“df+g?/4dd4”=>3));使用此方法,您可以完全使用str_replace()。我可能会选择$replacements[“//I”]=$replacement;如果你不能验证或担保标题,你应该使用preg_quote。打印(数组(“df+g?/4dd4”=>3));