Запарился с массивом...

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
kasap
Сообщения: 4
Зарегистрирован: 27 фев 2005, 21:11
Откуда: Москва

Привет всем. Вопрос даже для меня кажется банальным, но голова в последнее время плохо соображает. Объясняю суть вопроса.
Я хочу написать скрипт поиска на PHP. При этом хочу отсеивать всякий мусор из запроса типа "и", "найти" etc. Для этого записал подобные ненужные слова в отдельный файл. Теперь беру сам запрос, дроблю на отдельные слова и помещаю в массив $keywords, далее аналогично загоняю в массив $bad слова из файла. Теперь сам вопрос: Как мне удалить слово из массива $keywords при совпадении слова из $bad? И еще из этой же оперы. Как мне удалить все элементы из массива, длины которых меньше 3 символов? Смотрел в мануале функции для работы с массивами, но что-то ничего подходящего не нашел :(
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Ты это базой данных должен делать. И никаких массивов.
2B OR NOT(2B) = FF
kasap
Сообщения: 4
Зарегистрирован: 27 фев 2005, 21:11
Откуда: Москва

То есть???!!! Absurd, если у тебя какая-то идея насчет этого есть то поделись. Можешь дать пример?
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Absurd, базой обрабатывать слова запроса - верх расточительства.
kasap, чтобы удалить элемент, можно использовать ф-цию unset для этого элемента. Ну или новый массив собирай при помощи array_push
Даже самый дурацкий замысел можно воплотить мастерски
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

[quot]базой обрабатывать слова запроса - верх расточительства[/quot]
А как же select word from word_table where word not in(select * from bad_words);
2B OR NOT(2B) = FF
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Неправильно понял задачу...
2B OR NOT(2B) = FF
kasap
Сообщения: 4
Зарегистрирован: 27 фев 2005, 21:11
Откуда: Москва

Насколько правильно я понял, мне нужно сначала bad_words занести в какую-нибудь таблицу, скажем bad_words. Но дальше ситуация начинает терять ясность. Если два запроса - это расточительство, то как мне тогда осуществить поисковый запрос?
$query="SELECT* FROM table_for_search WHERE content LIKE '%$keyword%'"; не подходит потому что запрос еще не фильтрован, а перед этим его надо отфильтровать. Select word from word_table where word not in(select * from bad_words) - наверно не подходит потому что весь запрос нужно дробить на слова и запихивать в какую-нибудь таблицу. Так как же мне одним запросом отфильтровать запрос и одновременно сделать поисковую выборку?
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

Попробуй проверять слова перед занесением в массив $keywords. Массив $bad надо сделать хеш-массивом и проверка будет быстрой.
UUU
Сообщения: 310
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

Имхо:
1.сначала фильтруешь строку поиска, оставляя в ней только нужное.
2.Определяешь, будет ли жесткий поиск по словам или по совпадению символов (например поис*). Если второе, то строишь нужный регексп.
4. формируешь нужный регексп
3. На выбор - либо при селекте ставишт регексп либо перебираешь всю БД и регексп подставляешт на своей стороне.
Ответить