У меня есть текст:
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 значением за раз:
limit
preg_replace
foreach ($bar as $b) { $string = preg_replace('/{{bar}}/usi', $b, $string, 1); } echo $string;
Выход:
Демонстрация на 3v4l.org
Другая идея будет preg_replace_callback() вместе с array_shift.
preg_replace_callback()
array_shift
$res = preg_replace_callback('/{{bar}}/', function($m) use (&$bar) { return array_shift($bar); }, $str);
для изменения $bar внутри функции обратного вызова, & передано по ссылке
$bar
&
для работы анонимной функции обратного вызова вам, вероятно, понадобится PHP v5.4 +
Вот демонстрация на 3v4l.org