2014-01-22 79 views
0

我哈瓦喜歡的字符串:與陣列替換字符串佔位符值

$my_string = "RGB colors are xxx, xxx, xxx"; 

也有一個數組:

$my_array = ["red", "green", "blue"]; 

我希望得到這樣的字符串:

echo $my_string; //RGB colors are red, green, blue 

是否有一個班輪可以做這個替代品?這是一個具有相同佔位符的字符串,它將被數組中的每個值替換。

+0

我想的sprintf()會做你的要求。 –

+0

佔位符是否需要「xxx」?你能改變它們嗎?如果是這樣,請嘗試使用['sprintf()'](http://www.php.net/sprintf)(可能使用['call_user_func_array'](http://php.net/call_user_func_array))。 –

+1

[多個替換(可能preg \ _replace)與數組相同的字符串的可能的重複](http://stackoverflow.com/questions/2161639/multiple-replace-probably-preg-replace-of-same-string-with-陣列) – salathe

回答

0

以下行可以做到這一點。您可以允許通過數組循環,以取代各自的值全部XXX陣列

preg_replace('/xxx/',$my_array[2], preg_replace('/xxx/', $my_array[1], preg_replace('/xxx/', $my_array[0], $my_string, 1), 1), 1); 
1

這不是那麼簡單,因爲它可能是,因爲str_replace是一個全球性的更換 - 第一次調用將同替換替換所有xxx小號值。您可以使用preg_replace,並用$limit=1多次調用它。

$my_string = "RGB colors are xxx, xxx, xxx"; 
    $my_array = [ "red", "green", "blue" ]; 
    $placeholder = '/xxx/'; 
    foreach ($my_array as $color) { 
    $my_string = preg_replace($placeholder, $color, $my_string, 1); 
    } 

請注意,修改原始字符串;如果你不希望發生這種情況,你應該製作一份副本,並在循環中使用它,而不是$my_string

你也可以使用sprintf作爲意見提出,只要準備:

$args = $my_array; 
    array_unshift($args, str_replace(['%','xxx'], ['%%','%s'], $my_string)); 
    $result = call_user_func_array(sprintf, $args); 
0

試試這個:

$my_string = "RGB colors are TO_BE_REPLACE"; 
$my_array = ["red", "green", "blue"]; 
echo str_replace('TO_BE_REPLACE', implode(',', $my_array), $my_string); //RGB colors are red, green, blue