抱歉,我很难创建一个正确的标题。这是我的问题,我有一个TXT文件:
{{title}}<br />{{content}}
这是PHP文件: 我加载file.txt并将标记{{variable}}替换为$ data ['variable']
中的值$data = array ( 'title' => 'Hello', 'content' => 'WORLD!!');
$file = file_get_contents("file.txt");
$key = array_keys($data);
$value = array_values($data);
$file = str_replace($key, $value, $file);
echo $file;
从file.txt
中没有任何变化我有2种方法可以通过以这种格式分配数组的键来解决这个问题
'{{variable}}' => 'value'
或写
str_replace(array('{{','}}'),'',$file)
之前
echo $file;
还有另一种方法吗?
之前......答案 0 :(得分:1)
是
function bracelize($str) {
return '{' . $str . '}';
}
$search = array_map('bracelize', $key);
然后只使用$search
数组。
如果您使用PHP&gt; = 5.3,如果您不想污染命名空间,可以使用匿名函数:
$search = array_map(function($str){ return '{'. $str .'}';}, $key);
话虽如此,如果您打算将其用作HTML模板系统,请不要这样做。 PHP本身就是一个模板引擎;为什么增加更多开销? 阅读this question。
答案 1 :(得分:0)
$data = array ( 'title' => 'Hello', 'content' => 'WORLD!!');
$file = file_get_contents("file.txt");
foreach ($data as $key => $value) {
$file = str_replace('{{' . $key . '}}', $value);
}
echo $file;
虽然这可能会慢一些。
使用正则表达式的另一个版本:
$file = preg_replace_callback('#\{\{([A-Za-z0-9]+)\}\}#', function($match) use($data) {
if (isset($data[$match[1]])) {
return $data[$match[1]];
}
}, $file);
另一个(和我的首选版本)是用#{{([A-Za-z0-9)}}#
替换文件中的所有<?php echo isset($data['$1']) ? $data['$1'] : null; ?>
,缓存生成的PHP代码,然后执行提供$data
数组;)