<?php
/* Строка, произвольная */
$string = "AABBBCCDEEEEFFZY";
/* Для наглядности покажем номера символов*/
$arr1 = str_split($string);
foreach($arr1 as $key => $value){
$lets .= "<td> $value </td>";
$nums .= "<td><small>$key</small></td>";
}
echo "<table><tr>$lets</tr><tr>$nums</tr></table>";
/* Таким будем заменять */
$rep['AA']='ABCDE';
$rep['BBB']='X';
$rep['D']='FF';
$rep['FF']='1234';
/* Масив который покажет на каком порядковом номере в строке начинаеться
то или иное искомое выражение, из масива замен */
foreach($rep as $find => $val){
$vhodov = substr_count($string, $find);
$i=0;
/* узнаём длину выражения которым заменим участок */
$find_len = strlen($find);
//Копируем еккземпляр строки для обработки первой заменой
$str = $string;
for($i=0;$i<$vhodov;$i++){
/* вхождение, номер позиции относительно нашего екземпляра строки*/
$pos = strpos($str, $find);
/* обрезаем обработаную часть строки */
$str = substr($str, $pos + $find_len);
/* позиция вхождения, относительно оригинала строки */
$start = $pos+$stop;
$stop = $start + $find_len;
/* создаём масив позиция для старта и идентификатор заменителя */
$where['start']=$start;
$where['stop']=$stop;
$where['f']=$find;
/* и заносим в главный масив для фиксации вхождений */
$wp[]=$where;
}
unset($plus_pos);
unset($pos);
unset($i);
unset($start);
unset($stop);
}
/* сортируем масив по первому значению (старт) это очень важно
для последующего прохождения с заменами по строке*/
sort($wp);
//echo '<pre>';
//print_r($wp);
$str = $string;
$plus=0;
echo '<br><br>';
/* Цикл для обхода строки и замены */
foreach($wp as $zamena){
/* Узнаём что изменяем */
$find = $zamena['f'];
/* Узнаём на что изменяем */
$what = $rep[$find];
$what_lenth=strlen($what);
$find_lenth=strlen($find);
/* где будем начинать записывать замену */
$start = $zamena['start'];
/* до скольки замена будет заменять */
$stop = $start + $zamena_lenth;
$start +=$plus;
$stop +=$plus;
$raznitsa = $what_lenth-$find_lenth;
echo "Длина выражения [$what] $what_lenth, разница с длиной участка $raznitsa";
$plus += $raznitsa;
echo " итог -> $plus<br>Стартуем с $start на $what_lenth сейчас строка: $str<hr>";
$str = substr_replace($str, $what, $start, $what_lenth);
}
echo $str;
?>