Вывод данных из БД с сравнением PHP и MySQL

240
14 мая 2018, 18:20

Помогите вывести значения из таблицы. перед этим сравнив их. Допустим есть предложение:

"сегодня сияло прекрасное EX_WORD, а вечером будет CD_WORD"

и мне нужно вывести эти слова (Солнце, Вечером) из таблицы в предложение.

!!!То есть предложение после вывода должно выглядеть таким образом: "сегодня стояло прекрасное СОЛНЦЕ, а вечером будет ДОЖДЬ."

Таблица выглядит таким образом:

-----------------------------------
 id  | name     | text
-------------------------------------
  1 | EX_WORD  |  солнце
  2 | CD_WORD  |  дождь

В таблице около 4000 строк (я показал на примере только 2 строки)

предложений тоже 4000 и куждого предложения свои значения (не тольо солнце и дождь)

Answer 1

Вот одно из решений

<?php
$arrayFromBd = array('солнце', 'дождь');
$str = "сегодня стояло прекрасное СОЛНЦЕ, а вечером будет ДОЖДЬ.";
$strLower = mb_strtolower($str);
$matchWords = array_intersect(explode(' ', preg_replace('/[.,]/', '', $strLower)), $arrayFromBd);

$ind = 0;
foreach($matchWords as $val) {
    $str = substr_replace($str, "<b>".mb_strtoupper($val)."<b>", strpos($strLower, $val)+6*$ind) .
             substr($str, strpos($strLower, $val)+strlen($val)+6*$ind);
    $ind++;
}
echo $str;
// сегодня стояло прекрасное <b>СОЛНЦЕ<b>, а вечером будет <b>ДОЖДЬ<b>.

Или же сразу вытащить результат пример для запроса в бд

SELECT * FROM MyTable WHERE 
Column1 LIKE '%сегодня%'
OR Column1 LIKE '%стояло%'
OR Column1 LIKE  '%прекрасное%' ...

Также запрос с in

SELECT * FROM MyTable WHERE name in ('сегодня','стояло','прекрасное')

И вот про то что я комментировал

Сложный алгоритм для маленького массива ~1000

CPU times: user 4.56 ms, sys: 136 µs, total: 4.7 ms
Wall time: 4.09 ms

Простой алгоритм для маленького массива ~1000

CPU times: user 263 µs, sys: 63 µs, total: 326 µs
Wall time: 333 µs
READ ALSO
foreach возвращает дважды результат

foreach возвращает дважды результат

сообществоНе пойму то ли баг, то ли фича

221
Laravel Выборка записей из БД с пробелом

Laravel Выборка записей из БД с пробелом

В базе хранится запись Мобильные телефоныТак вот, при выборке и подстановке в атрибут value Ларавель оборачивает первое слово в кавычки - "Мобильные",...

218
Работа с итераторами, с++

Работа с итераторами, с++

Написать программу учета заявок на обмен квартир и поиска вариантов обменаКаждая заявка содержит сведения о двух квартирах: требуемой (искомой)...

318