使用替换字符串数组替换字符串中的相同占位符



我有一条短信:

foo {{bar}} foo {{bar}} foo

我有一个数组:

$bar[0] = 'lol';
$bar[1] = 'kek';

我想要这个结果:

foo lol foo kek foo

我试过这个:

preg_replace("/{{bar}}/usi",$bar,$text);

但它不起作用。

您可以通过遍历替换数组来获得所需的结果,使用limit参数进行preg_replace以防止它一次替换超过 1 个值:

foreach ($bar as $b) {
$string = preg_replace('/{{bar}}/usi', $b, $string, 1);
}
echo $string;

输出:

foo lol foo kek foo

3v4l.org 演示

另一个想法是与array_shift一起preg_replace_callback()

$res = preg_replace_callback('/{{bar}}/', function($m) use (&$bar) {
return array_shift($bar);
}, $str);
  • 若要从回调函数内部修改$bar&通过引用传递

  • 要使匿名回调函数正常工作,您可能需要 PHP v5.4+

这是 3v4l.org 的演示

使用语言兼容的占位符而不是{{bar}},然后使用本机函数vprintf()打印。

代码:(演示)

$string = 'foo {{bar}} foo {{bar}} foo';
$bar = ['lol', 'kek'];
vprintf(str_replace('{{bar}}', '%s', $string), $bar);

输出:

foo lol foo kek foo

相关内容

  • 没有找到相关文章

最新更新