2010-08-07 42 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