Задать вопрос
@wtfowned

Как придумать алгоритм — заменить слова в HTML на синонимы из массива при каждом вхождении?

Не могу сообразить как сделать замену в HTML коде страницы.

Есть массив со словами (массивов будет около 1к, в каждом 3-50 элементов)
['rain ', 'rainfall', 'storm']

Нужно чтобы в тексте вхождение каждого из этих слов заменялось на любое другое из массива, в тексте любое из слов массива может встречаться 0-N раз. При это чтобы слово rain не все N вхождений заменилось на storm , а в случайном порядке с rainfall, и другими вариантами (если есть).

Вариант 1:
str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed

$search = подать массив с синонимами
$replace = подать какую-то конструкцию которую потом отдельной функцией обработать, например конструкция вида "spintax" {rain|clown|snow}.

Вариант 2:
Создать некий индекс / многомерный массив каждого слова имеющегося, например имею 50 массивов с вариантами замен, нашлось определенное слово из массива 20 имеющее индекс 2 , в тексте заменить его на $WORD_20_2 , далее отдельной функцией искать регуляркой $word_20_2 и менять на элементы массива 20 и слова с НЕ индексом 2.

Оба решения мне кажутся недостаточно элегантными, наверняка есть более интересные варианты и простые. Думал еще через preg_match_all с индексом на offset сделать, но не получается ибо длина слов всегда разная.
  • Вопрос задан
  • 128 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
думаешь Гугл наиипать? он таких умных на патенте вертел

по сабжу:
первым проходом меняешь искомое на СЛУЖЕБНОЕ
вторым формируешь массив замен (чиста па-прастому, но можно и па взрослому, с корпусами)
третьим меняешь СЛУЖЕБНОЕ на элементы массива
Ответ написан
Robur
@Robur
Знаю больше чем это необходимо
разбейте все на массив слов - и пробегите по нему циклом или map собрав обратно, попутно заменяя слова как вам хочется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы