2010-08-07 61 views
0

对不起,我很困惑创建一个正确的标题。这是我的问题,我有一个TXT文件:php用数组值替换我的标签(作为数组键值)

{{title}}<br />{{content}} 

这是PHP文件: 我file.txt的加载和替换标记{{变量}}从$值数据[“变量”]

从file.txt的
$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; 

没什么变化

我必须解决这个由分配数组的键在此格式2路

'{{variable}}' => 'value' 

或写

str_replace(array('{{','}}'),'',$file) 

echo $file; 

的是,有另一种方式?

THX前...

回答

1

是的。

function bracelize($str) { 
    return '{' . $str . '}'; 
} 

$search = array_map('bracelize', $key); 

然后,只需使用$search阵列。

如果你正在使用PHP> = 5.3,你可以使用匿名函数,如果你不想污染命名空间:

$search = array_map(function($str){ return '{'. $str .'}';}, $key); 

话虽这么说,如果你打算用这个作为一个HTML模板系统,请不要。 PHP本身就是一个模板引擎,为什么增加更多开销? 阅读this question

+0

PHP是一个模板引擎,但如果您不信任模板编写器,则很有必要在PHP中定义一个更简单的模板语言。 – tdammers 2010-08-07 13:24:15

+0

而模板化的PHP并不是真的很好写或看。 – NikiC 2010-08-07 13:26:30

+0

@nick嗯,我认为这很好,但每个人都是。 – NullUserException 2010-08-07 13:31:33

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); 

另一个(和我的优选版本)是具有<?php echo isset($data['$1']) ? $data['$1'] : null; ?>替换所有#{{([A-Za-z0-9)}}#在文件中,缓存所得到的PHP代码,然后执行提供$data阵列;)

+0

请注意,使用正则表达式的版本需要PHP> = 5.3 – NullUserException 2010-08-07 13:15:01