我有一个像:
这样的字符串$my_string = "RGB colors are xxx, xxx, xxx";
还有一个数组:
$my_array = ["red", "green", "blue"];
我想得到一个字符串:
echo $my_string; //RGB colors are red, green, blue
是否有可以替换的单线眼镜?这是一个具有相同占位符的字符串,可以替换为数组中的每个值。
答案 0 :(得分: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);
答案 1 :(得分: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);
答案 2 :(得分: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