Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 14.11.2018
Сообщений: 3

Php mysqli как сделать вывод из базы в массив и сделать проверку на сходство

14.11.2018, 02:29. Показов 2837. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как сделать что-то подобное.
Есть база данных
В базе таблица типа:
(название 1 столба) - notes
(строка 1) - текст1, текст2, текст3
(строка 2) - другой текст
(строка 3) - текст4
(название 2 столба) - notes_ot
(строка 1) - Ответ1
(строка 2) - Ответ2
(строка 3) - Ответ3
т.е в строках первого столба могут встречаться слова через запятую, словосочетания, и просто слово. Во втором столбе просто предложения.
Как вывести из первого столба, из базы данных в массив типа:
$array = array("текст1", "текст2", "текст3", "другой текст", "текст4");
А после сделать проверку со строкой например:
$text = "В этой книге много текста, есть и другой текст";
На наличие чего-либо из массива в этом тексте и вывести ответ если есть совпадения. Ответ должен быть со второго столба. Например:
Если если в этом тексте($text) совпадения например текста из массива "другой текст", то вывести 'ответ2' - со второго столба.
Извините,я первый раз обращаюсь на форум и не знаю как правильно тут писать.
//
Выборку делаю так
PHP
1
2
3
4
5
6
7
$sql = "SELECT * FROM `notes`";
$result = mysqli_query($link,$sql);
while($row= mysqli_fetch_assoc($result)) {
    $not= $row['notes_title'];
 $array = preg_split("/[\s,]+/", $not);
 
print_r($array);
Ответ не устраивает:
Array ( [0] => Текст1 [1] => текст2 [2] => текст3 ) Array ( [0] => Другой [1] => текст) Array ( [0] => Текст4 )
//
Проверку делаю так, в принципе она работает
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$text = "В этой книге много текста, есть и другой текст";
$slova = array(//тут то что хочу вывести с базы данных);
$m = false; //ставлю флаг
foreach($slova as $slovo) {
  if (strpos($text, $slovo) !== false) {
     
    $m = true; // если слова найдены то переключаю на ИСТИНА
  }
}
if ($m) { //если истина то выполняю условие
  echo 'в тексте есть совпадения';
 
}
Подскажите пожалуйста, как это организовать
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2018, 02:29
Ответы с готовыми решениями:

Как сделать проверку на наличия маила в базе c mysqli?
Здравствуйте подскажите как правильно переделать выражения из mysql в mysqli, $sel = ("SELECT * FROM `users` WHERE `mail` =...

Как в php сделать вывод на печать для базы данных
Как сделать вывод на печать данных из б.д , которые выведенны на сайт путем запросов

Как сделать такой MySQLi PHP запрос?
Добрый вечер, У меня есть 2 таблицы Company: company_id, company_name REVIEW: review_id, company_id, review_text Я пытаюсь...

4
Невнимательный
 Аватар для ft4l
2840 / 1267 / 358
Регистрация: 08.02.2013
Сообщений: 7,374
Записей в блоге: 2
14.11.2018, 03:15
Цитата Сообщение от Вчеслав Посмотреть сообщение
Ответ не устраивает:
...... Array ( [0] => Другой [1] => текст) Array ( [0] => Текст4 )
Неустраивает то что в одном из случаев "[0] => Другой [1] => текст" , т.е нужно "[0] => Другой текст"?
Если запятые есть везде где разделяется нужное
$array = preg_split("/,\s*/", $not);
Eсли нужен один массив со всеми результатами, можно так
$array = array_merge($array, preg_split("/,\s*/", $not));
// возможно после цикла нужно ещё $array = array_unique($array);
1
0 / 0 / 0
Регистрация: 14.11.2018
Сообщений: 3
14.11.2018, 11:41  [ТС]
Цитата Сообщение от ft4l Посмотреть сообщение
Неустраивает то что в одном из случаев "[0] => Другой [1] => текст" , т.е нужно "[0] => Другой текст"?
Да, верно, не устраивает именно поэтому.
Спасибо за ответ, буду пробовать

Добавлено через 22 минуты
Ответ выше исправил положение в плане словосочетаний выдается правильно
[0] => Другой текст"
Но если слова через запятую, все равно вывод типа:
Array ( [0] => Текст1 [1] => текст2 [2] => текст3 ) Array ( [0] => Другой текст ) Array ( [0] => Текст4 )
Хотелось бы чтоб и подобный текст выводился, как:
Array ( [0] => Текст1 ) Array ( [0] => Текст2 ) Array ( [0] => Текст3 )Array ( [0] => Другой текст ) Array ( [0] => Текст4 )

И еще один вопрос. Почему каждый отдельный массив идет с заглавной буквы, это можно как-то исправить?

Добавлено через 47 минут
С массивом, в принципе, можно оставить и такого плана, как подсказал ft4l. С заглавными буквами разобраться бы и создать бы ответ со второго столба на совпадение.
Сейчас имею:
массив выходит, пусть и такого вида, но по проверки на совпадения работает как надо.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$text = "В тексте есть много текста, есть и Другой текст";
$sql = "SELECT * FROM `notes`";
$result = mysqli_query($link,$sql);
while($row = mysqli_fetch_assoc($result)) {
    $array = $row['notes_title'];
$array1 = preg_split("/,\s*/", $array);
print_r($array1);
$slova = $array1;
$m = false; //ставлю флаг
foreach($slova as $slovo) {
if (strpos($text, $slovo) !== false) {
$m = true; // если слова найдены то переключаю на ИСТИНА
  }
}
if ($m) { //если истина то выполняю условие
  print '-Есть совпадение';
 
}
}
Ответ вполне устраивает
Array ( [0] => Текст1 [1] => текст2 [2] => текст3 ) Array ( [0] => Другой текст ) -Есть совпадение Array ( [0] => Текст4 )

Не устраивают заглавные буквы в массиве, как избавиться?
0
Невнимательный
 Аватар для ft4l
2840 / 1267 / 358
Регистрация: 08.02.2013
Сообщений: 7,374
Записей в блоге: 2
14.11.2018, 15:05
Лучший ответ Сообщение было отмечено Вчеслав как решение

Решение

Зависит от кодировки текста, и от того что предпочтительнее, менять заглавные буквы
или искать без учёта регистра
Например у меня такое с UTF-8 заработало
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
ini_set('display_errors', 1);
ini_set('log_errors', 0);
 
//setlocale(LC_ALL, 'ru_RU.utf8');// в разных системах разные
// не помогало со stripos()
$text = "В тексте есть много текста, есть и дрУгОЙ текст";
 
$rows = array(
    'Текст1, Текст2, Текст3',
    'Текст4, Другой текст',
    'Текст5',
    'Текст4, Другой текст'
);
 
$array = array();
for($i=0; $i<count($rows); ++$i){
    $array = array_merge($array, preg_split("/,\s*/", $rows[$i]));
}
echo '<xmp>';
echo '$array = ';
var_dump($array);
echo "</xmp>\n";
 
$result =0;
for($i=0; $i<count($array); ++$i){
//  if (stripos($text, $array[$i]) !== false) {
// потребовалось это // sudo apt install  php-mbstring
    if (mb_stripos($text, $array[$i]) !== false) {
        ++$result;
        break;
    }
}
if ($result)
    echo "Найдено совпадение с \$array[$i]\n";
else
    echo "Не найдено совпадений\n";
 
echo '<hr/>php-'.phpversion() .'<hr/>'. $_SERVER['SERVER_SIGNATURE'] ."\n";
?>
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$array = array(8) {
  [0]=>
  string(11) "Текст1"
  [1]=>
  string(11) "Текст2"
  [2]=>
  string(11) "Текст3"
  [3]=>
  string(11) "Текст4"
  [4]=>
  string(23) "Другой текст"
  [5]=>
  string(11) "Текст5"
  [6]=>
  string(11) "Текст4"
  [7]=>
  string(23) "Другой текст"
}
Найдено совпадение с $array[4] php-7.2.10-0ubuntu1
Apache/2.4.34 (Ubuntu) Server at php.localhost Port 80
1
0 / 0 / 0
Регистрация: 14.11.2018
Сообщений: 3
14.11.2018, 15:25  [ТС]
Спасибо тебе. Буду пробовать. Вроде все понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2018, 15:25
Помогаю со студенческими работами здесь

Как на php+mysqli сделать смену картинок?
ссылки на картинки хранятся в таблице data бд test сена картинки в html документе по нажатию на кнопку без таймера. За одно нажатие смена...

Как сделать вывод данных в диапазоне mysqli
Как сделать так, чтобы вывод по диапазону выводил на эту же страницу, и правильно ли я сделал sql запрос? тут весть код &lt;?php ...

Как сделать проверку базы адресов на наличие мертвых ссылок?
Как сделать проверку базы адресов на наличие мертвых ссылок?

Как сделать проверку на авторизацию без базы данных .htaccess
Всем привет есть такой код: &lt;?php $admin_login=&quot;1&quot;; $admin_password=&quot;2&quot;; if($admin_login == ($_POST) &amp;&amp; $admin_password ==...

Как сделать проверку checkbox на PHP?
Народ, подскажите, как мне сделать обработку чекбоксов в php? Нужно если checkbox отмечен, вставлять в новую переменную нужное значение....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru