php用数组值替换我的标签(作为数组键)

时间:2010-08-07 13:08:14

标签: php

抱歉,我很难创建一个正确的标题。这是我的问题,我有一个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; 

还有另一种方法吗?

之前......

2 个答案:

答案 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数组;)