Я пытаюсь разделить строку с помощью preg_split, взять результаты, окружить их пользовательскими данными и заново вставить их в исходную строку.
Например:
$string="this is text [shortcode] this is also text [shortcode2] this is text";
После этого я хочу, чтобы строка равнялась:
$string="<span id='0'>this is text </span>[shortcode]<span id='1'> this is also text </span>[shortcode2]<span id='2'>this is text</span>";
Мне удалось разбить строку на массив:
$array=preg_split(/\[[^\]]*\]/,$string);
Затем я попытался использовать цикл for next, чтобы заменить значения, что работало нормально, за исключением случаев, когда значения массива имели одинаковые совпадения в строке.
Любая помощь приветствуется — или другой подход, который может быть лучше.
preg_split()
это неправильный инструмент для этого, я бы предложил использовать обратный вызов.
Ниже приведен пример, с которого можно начать, в котором вы можете изменить его в соответствии со своими потребностями.
$str = preg_replace_callback('~(?:\[[^]]*])?\K[^[\]]+~',
function($m) {
static $id = 0;
return "<span id='".$id++."'>$m[0]</span>";
}, $str);
Других решений пока нет …