2010-05-01 42 views
0

我建立一個模板系統收發郵件,目前工作在格式人:循環通過自定義模板掛鉤的事情

$array['key1'] = "text"; 
$array['key2'] = "more text"; 

<!--key1--> // replaced with *text* 
<!--key2--> // replaced with *more text* 

對於這個特殊的項目,我有這種結構的嵌套數組:

$array['object1']['nest1']['key1'] = "text"; 
$array['object2']['next1']['key1'] = "more text"; 

<!--[object1][nest1][key1]--> // replaced with *text* 
<!--[object2][nest1][key1]--> // replaced with *more text* 

<!-- .. -->將放置在HTML文件中,然後將其加載到一個字符串中。最上面的例子顯示我用數據替換註釋。

在PHP中這樣做的最好方法是什麼?我想我可以通過陣列循環,但後來我失去了思路,迷失在我正在做的事情中!

所有幫助將不勝感激! 謝謝

+0

那麼,你想用數組中的內容替換字符串中類似數組的部分? – 2010-05-01 12:46:00

+0

是啊...它的更多的模板引擎 – tarnfeld 2010-05-01 13:02:24

+0

可能重複的http://stackoverflow.com/questions/2171963/php-array-as-variable-name – outis 2010-05-01 13:21:33

回答

1

那麼,使用eval是危險的,但如果所有的代碼運行雖然它是由你,它不會傷害。你可以試試這個:

<?php 

$array['object1']['nest1']['key1'] = "text"; 
$array['object2']['nest1']['key1'] = "more text"; 

$str = "sadfadsfjäadsföljadsölf 
<!-- ['object2']['nest1']['key1'] --> 
asdföadsjlf"; 

$split = explode(' 
',$str); // This sucks, you can use \n to detect line-breaks. Doesn't work that way in this example 

foreach($split as $key => $value) { 
    if(preg_match('/\<\!\-\- (\[.+\]) \-\-\>/e',$value,$matches)) { 
    eval("echo \$array".$matches[1].";"); 
    echo "\n"; 
} else { 
    echo $value."\n"; 
} 
} 

?> 

很奇怪的方式,但我無法弄清楚任何更清楚。

+0

「如果eval()是答案,那麼你幾乎肯定會問錯誤的問題。」 – outis 2010-05-01 13:48:24

+0

這就是我的意思是我的第一行,但這是我認爲這樣做的最明確的方式。 – 2010-05-01 13:52:35