Задать вопрос
@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 сделать, но не получается ибо длина слов всегда разная.
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
думаешь Гугл наиипать? он таких умных на патенте вертел

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽