2011-06-24 85 views
1

我有一個使用該結構的模板文件 [名字] [姓氏]搜索[]和取代一切之間它

等等等等....我會做一個搜索和替換它。我想要做的一件事是,當模板被髮回時,如果我沒有規定,[FIRSTNAME] ....它仍然顯示在模板中...我想使它成爲空如果我避風港沒有爲這個變量規定任何數據。

在我的代碼

我使用的file_get_contents

$q = file_get_contents($filename); 
foreach ($this->dataArray as $key => $value) 
{ 
    $q = str_replace('['.$key.']', $value, $q); 
} 
return $q; 

所以一旦這個循環結束填充在適當的數據,我需要做的另一個搜索並替換爲任何變量使用,[名字]

我希望這是有道理的,任何人都可以引導我走向正確的方向。

Cheers

+0

因此,如果[FIRSTNAME]沒有映射到某個值,您希望刪除包括括號在內的所有內容,或者將括號保留在?您的頭銜感到困惑... – 2011-06-24 21:32:37

+0

對不起,是的,我想刪除括號內的所有內容。 – Justin

回答

3

這聽起來像你只是想增加這樣一行:

$q = preg_replace('/\[[^\]]*\]/', '' , $q); 

所有定義的換人之後,以消除任何剩餘的方括號的話。

如果您想簡明扼要,您可以用http://www.webmasterworld.com/php/3444822.htm的「單行模板引擎」的變體替換整個函數,用方括號代替捲曲。

+0

啊,是的,現場克雷格...這是完美的。 – Justin

+0

@Justin,更好的希望你的模板中不包含方括號,這些方括號不適用於你的關鍵字之一,因爲它們之間的任何內容都將被刪除。 – dqhendricks

2

你實際上可以將數組作爲參數傳遞給str_replace函數。

$keys = array(
    'FIRSTNAME', 
    'LASTNAME' 
): 

$replacements = array(
    'George', 
    'Smith' 
); 

str_replace($keys, $replacements, $input); 

如果你想,如果它的空白刪除名字,你爲什麼不只是它的一個''值添加到鍵=>更換陣列?

$this->dataArray['FIRSTNAME'] = ''; 

或類似

if (!isset($this->dataArray['FIRSTNAME'])) { 
    $this->dataArray['FIRSTNAME'] = ''; 
} 
+0

因爲我擁有大量的模板,所以我並不總是知道哪些數據會特別需要。所以我們通過我們所能做的事情,然後再填寫信息。 – Justin

+0

@Justin吧?我不知道我的理解是如何阻止你使用上面的代碼。 – dqhendricks

+0

@Justin你怎麼生成你用來做替換的數組呢?這是來自數據庫嗎? – dqhendricks

相關問題