Я работаю над проектом.Он ищет и заменяет слова из базы данных в заданном тексте.В базе данных есть 10 тыс. Слов и замен.Поэтому я хочу найти каждое слово и заменить слово для замены.
Кстати, я использую laravel.Мне нужны только идеи замены.
Я пробовал несколько способов, но он заменяет только одно слово.
Моя структура таблицы базы данных, как показано ниже;
Замена слова идентификатора
1 тестовое тестирование
и т. Д.
Текст поступает с ввода, и после замены я хочу показать, какие слова заменяются другим цветом bg на странице результатов.
Я попробовал приведенные ниже коды, работающие нормально, но он заменяет только одно слово.
$article = trim(strip_tags($request->article));
$clean = preg_split('/[\s]+/', $article);
$word_count = count($clean);
$words_from_database_for_search = Words::all();
foreach($words_from_database_for_search as $word){
$content = str_replace($word['word'],
"<span class=\"badge badge-success\">$word[replacement]
</span>",
$article);
}
$new_content = $content ;
$new_content_clean = preg_split('/[\s]+/', $new_content);
$new_content_word_count= count($new_content_clean);
Edit,
Я использую preg_replace вместо str_replace.У меня получилось, но на этот раз я хочу показать, сколько слов изменилось, поэтому я попытался найти количество измененных слов в тексте после замены.Это считается неправильным.
Пример, если есть 6 изменений, это показывает 3 или 4
Это может быть сделано через preg_replace_callback, но я не использовал его раньше, поэтому я не знаю, как выяснить;Мои рабочие коды приведены ниже;
$old_article = trim(strip_tags($request->article));
$old_article_word_count = count($old_article );
$words_from_database_array= Words::all();
$article_will_replace = trim(strip_tags($request->article));
$count_the_replaced_words = 0;
foreach($words_from_database_array as $word){
$article_will_replace = preg_replace('/[^a-zA-
ZğüşıöçĞÜŞİÖÇ]\b'.$word['word'].'\b\s/u',
" <b>".$word['spin']."</b> ",
$article_will_replace );
$count_the_replaced_words = preg_match_all('/[^a-zA-
ZğüşıöçĞÜŞİÖÇ]\b'.strip_tags($word['spin']).'\b\s/u',$article_will_replace
);
if($count_the_replaced_words ){
$count_the_replaced_words ++;
}
}