我有一条短信:
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