2010-05-25 35 views
3

我有這樣的字符串;如何用數組[INDEX]元素替換{tag_INDEX}

「字符串{TAG_0}文本{TAG_2}和{TAG_1}」

現在我需要與更換後,使得來自陣列

$myArray = array('a','b','c'); 

元素替換所有{tag_INDEX}它應該看起來像:

「String a text c and b」

這樣做的最佳方法是什麼?我試圖用的preg_replace和preg_replace_callback但沒有什麼好結果

回答

6
$newStr = preg_replace('/{tag_(\d+)}/e', '$myArray[\1]', $str); 
+0

不要忘記preg_replace'的'結果要麼分配,它不到位取代一些人往往顯得相信。 – 2010-05-25 09:47:29

+0

@Matthew,謝謝,我已經添加了一個任務給我的答案,以防有人被這個問題困惑 – 2010-05-25 09:52:50

0

運行在每個迭代與限制1迭代的正則表達式,並用$ myarray的[N]更換你的表達。

1

沒有正則表達式的要求:

$s = "String {tag_0} text {tag_2} and {tag_1}"; 
$myArray = array('a','b','c'); 

$s = template_subst($s, $myArray); 
echo $s; 

// generic templating function 
function template_subst($str, &$arr) { 
    foreach ($arr as $i => &$v) { 
    $str = str_replace("{tag_$i}", $v, $str); 
    } 
    return $str; 
} 
+0

出於好奇,爲什麼你通過引用來傳遞數組? – 2010-05-25 11:21:43

+0

@Matthew:爲什麼不呢。複製它沒什麼意義。 – Tomalak 2010-05-25 14:29:23