Страница 1 из 1
Запарился с массивом...
Добавлено: 31 мар 2005, 09:26
kasap
Привет всем. Вопрос даже для меня кажется банальным, но голова в последнее время плохо соображает. Объясняю суть вопроса.
Я хочу написать скрипт поиска на PHP. При этом хочу отсеивать всякий мусор из запроса типа "и", "найти" etc. Для этого записал подобные ненужные слова в отдельный файл. Теперь беру сам запрос, дроблю на отдельные слова и помещаю в массив $keywords, далее аналогично загоняю в массив $bad слова из файла. Теперь сам вопрос: Как мне удалить слово из массива $keywords при совпадении слова из $bad? И еще из этой же оперы. Как мне удалить все элементы из массива, длины которых меньше 3 символов? Смотрел в мануале функции для работы с массивами, но что-то ничего подходящего не нашел

Добавлено: 31 мар 2005, 10:46
Absurd
Ты это базой данных должен делать. И никаких массивов.
Добавлено: 31 мар 2005, 11:51
kasap
То есть???!!! Absurd, если у тебя какая-то идея насчет этого есть то поделись. Можешь дать пример?
Добавлено: 31 мар 2005, 12:18
AiK
Absurd, базой обрабатывать слова запроса - верх расточительства.
kasap, чтобы удалить элемент, можно использовать ф-цию unset для этого элемента. Ну или новый массив собирай при помощи array_push
Добавлено: 31 мар 2005, 12:29
Absurd
[quot]базой обрабатывать слова запроса - верх расточительства[/quot]
А как же select word from word_table where word not in(select * from bad_words);
Добавлено: 31 мар 2005, 12:32
Absurd
Неправильно понял задачу...
Добавлено: 31 мар 2005, 12:53
kasap
Насколько правильно я понял, мне нужно сначала 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) - наверно не подходит потому что весь запрос нужно дробить на слова и запихивать в какую-нибудь таблицу. Так как же мне одним запросом отфильтровать запрос и одновременно сделать поисковую выборку?
Добавлено: 31 мар 2005, 17:24
chur
Попробуй проверять слова перед занесением в массив $keywords. Массив $bad надо сделать хеш-массивом и проверка будет быстрой.
Добавлено: 04 апр 2005, 11:32
UUU
Имхо:
1.сначала фильтруешь строку поиска, оставляя в ней только нужное.
2.Определяешь, будет ли жесткий поиск по словам или по совпадению символов (например поис*). Если второе, то строишь нужный регексп.
4. формируешь нужный регексп
3. На выбор - либо при селекте ставишт регексп либо перебираешь всю БД и регексп подставляешт на своей стороне.