Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вырезка нужной часть

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Пишу быстрый поиск для сайта
D0Gmatist
Отправлено: 17 Декабря, 2013 - 23:38:47
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Пишу быстрый поиск ...
ищу решение задачи с отделением нужного к примеру

в таблице есть запись в одном поле
1 сторока яблоки, бананы, апельсины, мандарины
2 сторока бананы, апельсины, мандарины
3 сторока яблоки, мандарины

в поисковое поле в вожу
манд

в SELECT fruit FROM post LIKE '%{$query}%' LIMIT 3

$buffer ="";
while () {
$buffer = "<a http>" . $fruit . "</a>";
}

в итоге
$buffer возвращает полностью всю страку каждого поля

<a http>яблоки, бананы, апельсины, мандарины</a>
<a http>бананы, апельсины, мандарины</a>
<a http>яблоки, мандарины</a>


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

Пример
введённый запрос = манд
В переменной найдено (все записи через запятую)
яблоки, бананы, апельсины, мандарины

Вырезало
мандарины

и т.д.

Если есть такое решение помогите примером ...
Заранее спасибо.

(Отредактировано автором: 17 Декабря, 2013 - 23:41:30)

 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2013 - 00:11:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




хранение набора данных в одном поле через запятую - плохая идея. удобнее вынести их в отдельную таблицу со связью многие-ко-многим.
Далее, если фруктов относительно не много, можно вывести их список на страницу в виде яваскрипт-массива, и получить действительно быстрый поиск, переложив задачу на клиента. Т.е. во время ввода названия поиск производится в массиве, переданном на странице, а уже после окончательного выбора, от сервера запрашиваются необходимые данные по известному идентификатору фрукта.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 18 Декабря, 2013 - 00:13:48
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




D0Gmatist пишет:
манд

Радость

PHP:
скопировать код в буфер обмена
  1. $str = 'яблоки, бананы, апельсины, мандарины';
  2. $query = 'манд';
  3.  
  4. $arr = explode(',', $str);
  5. $tmp = array();
  6.  
  7. for($i = 0; $i < count($arr); $i++){
  8.     if(strstr($arr[$i], $query)){
  9.         $tmp[] = $arr[$i];
  10.     }
  11. }
  12. print_r($tmp);

Так, наверное?
(Добавление)
Ещё вариант без цикла
PHP:
скопировать код в буфер обмена
  1. $result = array_unique(array_map(function($val) use($query){
  2.     return strstr($val, $query);
  3. },$arr));
  4.  
  5. print_r($result);


но эксплод и $str должны быть конечно же..
(Добавление)
коль уж тема создана в разделе форума ООП, то вот ещё и ООП вариант Радость
Спойлер (Отобразить)

и надеюсь я не напутал и правильно понял что Вам нужно ))

(Отредактировано автором: 18 Декабря, 2013 - 00:42:02)

 
 Top
DelphinPRO
Отправлено: 18 Декабря, 2013 - 01:19:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)





teddy, горшочек, не вари ©Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Stierus Супермодератор
Отправлено: 18 Декабря, 2013 - 22:34:52
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
Пишу быстрый поиск ...

Цитата:
SELECT fruit FROM post LIKE '%{$query}%' LIMIT 3


Эти 2 фразы противоречат друг другу. Если хотите быстро искать по тексту - его вам надо будет индексировать. Для этого либо берите готовые сторонние решения (sphinx, lucene) либо читайте статьи на хабре про полнотекстовый поиск и пишите сами на бд.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB