用数组值替换字符串占位符

时间:2014-01-22 19:45:17

标签: php

我有一个像:

这样的字符串
$my_string = "RGB colors are xxx, xxx, xxx";

还有一个数组:

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

我想得到一个字符串:

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

是否有可以替换的单线眼镜?这是一个具有相同占位符的字符串,可以替换为数组中的每个值。

3 个答案:

答案 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