2014-03-29 46 views
0

我有一個模板系統,用數據庫中相應的值替換大括號內的每個關鍵字。替換之後更改上一個單詞

例子:該公司與{}學同意 ...

的問題是,一些模板是在西班牙,有是說,一個規則,當一個單詞開頭字母i以前的「和」連接器是e而不是y

示例: 通常的方式是說:

伊萬ý佩德羅。

但是,如果第二個名字以i開頭,那麼連接器是e

佩德羅Ë伊萬

我需要找到一種方法,以獲得準確的文件做這些替代品。

我知道我可以做雙重處理,先替換關鍵字,然後用替換 " e i",但我不確定這是否是解決此問題的最佳方法。

我使用的替代代碼如下:

$content = preg_replace_callback('#{(.*?)}#', 
    function ($key) use ($agreement) { 
      return utf8_decode($agreement[strtolower($key[1])]); 
    }, 
$content); 

哪裏$content是模板文字和$agreement是從數據庫中值的數組。

注意:它應區分大小寫。例如,如果文本是Pedro y Iván,則應將其替換爲Pedro e Iván而不是Pedro e iván

答:基礎上克里斯的答案,我終於結束了這段代碼中注重如果原始y是大寫或小寫。

$text = preg_replace_callback(
    '#([Yy])?{(.*?)}#', 
    function ($matches) use ($data) { 
     $and = ''; 
     $replacement = utf8_decode($data[strtolower($matches[2])]); 
     if ($matches[1]){ 
      $and_replacement = array(' Y '=>' E ',' y '=>' e '); 
      $and = in_array(substr($replacement,0,1),array('i', 'I'))?$and_replacement[$matches[1]]:$matches[1]; 
     } 
     return $and.$replacement; 
    }, 
    $text 
); 

回答

1

您可以用關鍵字一起搭配Y和替換它取決於更換 第一個字母:在這樣一個模板

$content = preg_replace_callback(
    '#(y)?{(.*?)}#', 
    function ($key) use ($agreement) { 
     $and = ''; 
     $repl = utf8_decode($agreement[strtolower($key[2])]); 
     if ($key[1]) 
      $and = in_array(substr($repl, 0, 1), array('i', 'I'))?' e ':' y '; 
     return $and.$repl; 
    }, 
    $content 
); 

所以:

{hombre} y {mujer} 
{mujer} y {hombre} 
sexy {mujer} 

隨着$agreement = array('mujer'=>'Isa', 'hombre'=>'Pedro'),這應該結束 與:

Pedro e Isa 
Isa y Pedro 
sexy Isa 
+0

謝謝。當然,伊莎比伊凡性感。:)我只是做了一些小的改變,以便確定原始的'y'是大寫還是小寫。 – Memochipan