В этой заметке расскажу не про какой-то готовый класс или функцию, а скорее про прием, которым можно воспользоваться, для достижения желаемого результата.
В одной моей статье про синонимизацию текста, алгоритм уперся в то, что все функции кроме strtr каждый раз заменяют текст, и обновляют его. Следующую замену они уже делают с обновленным текстом. Проиллюстрирую на примере
$str = 'мама мыла раму, а дочка балкон';
echo str_replace(array('мама','дочка'),array('дочка','бабушка'),$str);
//бабушка мыла раму, а бабушка балкон
echo preg_replace(array('#мама#u','#дочка#u'),array('дочка','бабушка'),$str);
//бабушка мыла раму, а бабушка балкон
echo strtr($str,array('мама'=>'дочка','дочка'=>'бабушка'));
//дочка мыла раму, а бабушка балкон
Как можете видеть, верным является лишь третий вариант. Но возможности strtr сильно ограничены, как научить preg_replace работать также, как и strtr