Есть строка (HTML). Нахожу в ней все плейсхолдеры и их позиции. Затем вставляю в исходную строку подстроки по позициям. И почему-то первая позиция отрабатывает нормально, а остальные сбиваются. Надо имено так, чтобы в процессе ещё каждую подстроку обработать. str_replace($placeholder, $replacer, $content), который заменит все вхождения на одно и то же значение не нужен.
Песочница с кодом
Делаю:
<?php
$content = '
<p>text</p>
<p>text</p>
<p>{PLACEHOLDER}</p>
<p>text</p>
<p>text</p>
<p>{PLACEHOLDER}</p>'
;
$placeholder = '{PLACEHOLDER}';
$replacer = '<div>INSERT</div>';
preg_match_all('/' . $placeholder . '/mi', $content, $matches, PREG_OFFSET_CAPTURE);
$result = [];
if (count($matches[0]) > 0) {
foreach($matches[0] as $match){
$result[$match[1]] = $match[0];
}
}
foreach ($result as $pos => $placeholder) {
$content = substr_replace($content, $replacer, $pos, strlen($placeholder));
}
var_dump($result);
var_dump($content);
Получаю:
array(2) {
[28]=>
string(13) "{PLACEHOLDER}"
[73]=>
string(13) "{PLACEHOLDER}"
}
string(98) "
text
text
INSERT
text
text
INSERT
DER}
"