2011-04-02 53 views
1

{$thisname}應該轉換爲<?php echo $thisname; ?>使用preg_match替換使用PHP變量的標籤

{thisname}應該轉換爲<?php echo $thisname; ?>

{$this.movie.games} & & {$this.new}應當分別轉換爲<?php echo $this["movie"]["games"]; ?><?php echo $this["new"]; ?>

回答

1
$tpl = 'Name: {$name}, Surname: {surname}, City: {$person.address.city}'; 

function tpl2php($m){ 
    $var = $m[1]; 
    if(strpos($var,'.')){ 
     $varArr = explode('.',$var); 
     $var = $varArr[0]; 
     for($i=1;$i<count($varArr);$i++){ 
      $var .= '["' . $varArr[$i] .'"]'; 
     } 
    } 
    return '<?php echo $' . $var . '; ?>'; 
} 

$php = preg_replace_callback('/{\$?([_a-z][\w\.]+[\w])}/iS','tpl2php',$tpl); 
// Name: <?php echo $name; ?>, Surname: <?php echo $surname; ?>, City: <?php echo $person["address"]["city"]; ?> 
+0

輝煌的答案夥計..... – Vish 2011-04-02 14:32:27

1

使用模板系統,我建議使用http://phpsavant.com/儘管它看起來就像你更感興趣的SmartyDwoo

有沒有必要重新發明輪子:)

+0

如果您downvote,請解釋原因。 – Peeter 2011-04-02 10:26:14

+0

我沒有downvote,但添加一個巨大的模板系統只是爲了能夠做這種替換可能不是用戶想要或需要的。 (另一方面,第二個想法是,它可以爲OP節省大量的工作,特別是當涉及到像'var1.var2.var3'這樣的複雜內容解析時,+1等) – 2011-04-02 11:04:07

0

使用str_replace功能。

+0

用所有}標籤替換; ?>我不想這樣做...我想用preg match – Vish 2011-04-02 10:28:50

0

preg_replace和regular expressions比str_replace更靈活,特別是如果您必須將this.movi​​e這樣的字符串解析爲$ this [「movie」]。但這不是一件容易的事。