как использовать preg_match для замены массива - PullRequest
1 голос
/ 30 мая 2019

У меня есть текст:

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

У меня есть массив:

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

Э-э, я хочу получить текст:

foo lol foo kek foo

Это:

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

не работает.

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Вы можете получить желаемый результат, просматривая массив замен, используя параметр 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

1 голос
/ 30 мая 2019

Другая идея будет preg_replace_callback() вместе с array_shift.

$res = preg_replace_callback('/{{bar}}/', function($m) use (&$bar) {
  return array_shift($bar);
}, $str);
  • для изменения $bar внутри функции обратного вызова, & передано по ссылке

  • для работы анонимной функции обратного вызова вам, вероятно, понадобится PHP v5.4 +

Вот демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...