2010-10-21 82 views
4

替換相同字符假設我有一個字符串與不同的字符串

$str = "abc*efg*hij*"; 

並根據該陣列

$arr = array("123","456","789"); 

現在我想在$str與元件更換* S IN $arr第一個*替換爲$arr[0],第二個替換爲$arr[1] etc.I檢查函數str_replace,雖然它接受數組作爲參數,但它我發現它並沒有work.And我不能只用

$newstr = "abc{$arr[0]}efg{$arr[1]}hij{$arr[2]}" 

因爲真正$str可能是相當長的字符串有很多*。任何好的想法?謝謝。

回答

11

如果*是唯一的格式字符,嘗試轉換*%s(也逃避現有%%%),然後使用vsprintf(),這需要值的數組中傳遞作爲格式參數:

$str = str_replace(array('%', '*'), array('%%', '%s'), $str); 
$newstr = vsprintf($str, $arr); 
echo $newstr; 

輸出:

abc123efg456hij789 

需要注意的是,如果你有比星號更數組元素,最後多餘的元素根本不會出現在字符串。如果您的星號比數組元素多,則vsprintf()將發出太少的參數警告並返回false

1

你可能永遠都只是保持簡單與preg_replace()並利用$limit說法,就像這樣:

for($i = 0; $i < count($arr); $i++) 
    $str = preg_replace('/\*/', $arr[$i], $str, 1); 

但是對於實用性的緣故,@ BoltClock的回答是更好的選擇,因爲它一)不涉及一個循環,但更重要的是b)不是被迫使用正則表達式。

+0

好的解決方案。我只是打算爆炸,然後再合併碎片,這顯然不是一個好主意:) – Young 2010-10-21 06:02:56

相關問題