我哈瓦喜歡的字符串:與陣列替換字符串佔位符值
$my_string = "RGB colors are xxx, xxx, xxx";
也有一個數組:
$my_array = ["red", "green", "blue"];
我希望得到這樣的字符串:
echo $my_string; //RGB colors are red, green, blue
是否有一個班輪可以做這個替代品?這是一個具有相同佔位符的字符串,它將被數組中的每個值替換。
我哈瓦喜歡的字符串:與陣列替換字符串佔位符值
$my_string = "RGB colors are xxx, xxx, xxx";
也有一個數組:
$my_array = ["red", "green", "blue"];
我希望得到這樣的字符串:
echo $my_string; //RGB colors are red, green, blue
是否有一個班輪可以做這個替代品?這是一個具有相同佔位符的字符串,它將被數組中的每個值替換。
以下行可以做到這一點。您可以允許通過數組循環,以取代各自的值全部XXX陣列
preg_replace('/xxx/',$my_array[2], preg_replace('/xxx/', $my_array[1], preg_replace('/xxx/', $my_array[0], $my_string, 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);
試試這個:
$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
我想的sprintf()會做你的要求。 –
佔位符是否需要「xxx」?你能改變它們嗎?如果是這樣,請嘗試使用['sprintf()'](http://www.php.net/sprintf)(可能使用['call_user_func_array'](http://php.net/call_user_func_array))。 –
[多個替換(可能preg \ _replace)與數組相同的字符串的可能的重複](http://stackoverflow.com/questions/2161639/multiple-replace-probably-preg-replace-of-same-string-with-陣列) – salathe