![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Zmiuko |
|
||||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Ребят. Проблема такая.
Есть массив данных. Допустим это история сообщений гостевой книги.
Вносим, к примеру, в поиск "Привет как дела?", указываем ключ $a=1 , регистронезависимый , указываем ключ $b - первая максимально схожая строка, в случае отсутствия совпадений - выводит " Привет!" , либо "Привет как дела?" в случае совпадения Не могу никак придумать функцию, которая бы искала указанную фразу среди массива имеющихся не смотря на знаки препинания... Пробовал посредством ereg
где каждый элемент массива фильтруется, разбивается на слова и собирается в паттерн "Привет", либо "Как|дела" и через регулярку сравнивается, но с различными фразами очень много косяков и часто поиск не работает. Помогите решить проблему. Поиск, гугл, яндекс - безрезультатно. Мускул не использую. Добавлено @ 09:19
Точнее так ничего не выходит... Добавлено @ 09:19 Выводит последний элемент массива по любому запросу :( Это сообщение отредактировал(а) Zmiuko - 20.10.2009, 09:22 |
||||||
|
|||||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Подпись под всем этим неиллюзорно доставляет.
|
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Не понял, пардон.
Я в регулярках дубок. Понимаешь, мне как то надо при поиске фразы, найти из массива ту фразу, которая по словам схожа, в каком порядке бы они не были.. На ум приходит только ereg('/слово|слово|слово/', $искомая_фраза) Можно хоть в массиве по паттерну искать, хоть паттерном по искомой фразе... однохерственно: и там и там словосочетания. Да и смысл дальнейшей работы, что мне формировать паттерн из элемнов массива удобнее будет. Ну хз как сделать чтобы была регистронезависимость и любой порядок слов. :( Добавлено через 2 минуты и 21 секунду К примеру есть элемент массива "Петя любит Машу", и чтобы его находило по запросам "петя любит машу", "Петя машу Любит" и так далее |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Я-то понимаю.
Мне интересно, поймет ли кто-то еще, в этом нагромождении не имеющих никакого отношения к задаче массивов, вложенных массивов, ключей, xz каких функций и прочего. И снова к вопросу о том, нужны ли алгоритмы пхп-программисту. Прекрасная иллюстрация. Мы наблюдаем сейчас случай, когда программист привыкнув, что алгоритм ему не нужен, пытается решить задачу "в лоб", так же, как обычно - просто написав один за другим несколько операторов. Только обычно алгоритм есть, неявный, и обычно получается. А здесь алгоритма нету совсем, и поэтому попытки выглядят очень смешно. |
|||
|
||||
Zmiuko |
|
||||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Есть файл истори сообщений, читаем функцией file() в массив $arr:
Есть фраза "И как, все нормально", которая как видим присутствует в массиве, только порядок слов и регистр другой. Далее, я пробегаю циклом по массиву, и обрабатываю каждый элемент функцией xz() (функция делит словосочетания в элементах по словам [то есть пробелам], уберает окончания и вывод в массив), затем результат функции xz() обрабатываю посредством implode('|', xz(**)) дабы получить паттерн для функции eregi. Получаем:
Должно вывести схожий по словам элемент, но фигвам! :( Чего тут непонятного? P.s.: Вы уж извините, что я здесь функцию xz не привожу, но просто две страницы замет код. |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
регулярка?
не получится написать регулярку "сначала либо первое слово, либо второе; затем - затем оставшееся, в зависимости от того, что было в первой позиции". потому у тебя полученная регулярка будет находить по запросу "петя любит машу" и элемент "петя петя машу" и "машу машу машу". точнее, собрать регулярку возможно, но так как она будет для N слов состоять из N! вариантов разного порядка слов, то для поиска 5 слов будет регулярка из 120 вариантов порядка следования слов. А уж какой длины будет полученная регулярка, лучше не думать. Это же просто смерть сервера. |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Хорошо написал, только вот не по делу. Я устал и не спал. Мог бы написать конечно "Народ, необходима функция для сравнения двух фраз, где порядок слов и регистр не имеет значения", но решил ситуацию изобразить полностью. Нужны алгоритмы, не нужны... Отвечу, для формирования некой базы знаний нужно все, необходимо просто. Имхо только ошибки нас и учат. Мне, 16-летнему как-то сложные философские конструкции не к чему. А вы, Ипатьев, извиняюсь, ежели Вам не нравиться, нету желания, рябит в глазах от моего кода, лучше бы не показывали свой ум и мнение, а не писали вовсе. Зачем умолять в чужих глазах на этом форуме, для этого блоги есть. Извиняюсь за флуд и прощу прощения что потревожил своими дурацкими идеями. Добавлено через 2 минуты и 11 секунд Хм.. А через eregi('слово|слово|слово') не получится? дело в том что вышеуказанный код нормально реагирует на длинные фразы, а если я ищу слово "привет" то возращает пустое значение.. |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
начнем с того, что функция file ничего похожего на массив $arr в принципе вернуть не может. не говоря уже о том, что сам по себе массив является лишним звеном в задаче поиска по строке. и так в этой задаче всё. миллион лишних телодвижений, за которыми сама задача (довольно простая, в сущности), совершенно теряется из виду. если бы вы не пытались сделать все сразу - и поиск по массиву, и регистронезависимый, и без знаков препинания, то дело бы пошло быстрее. а если бы вы сначала решили основную задачу - собственно поиск, вместо кучи второстепенных - то еще быстрее. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
если ты ищешь в строках определенные слова в произвольном порядке, то почему бы не разбить строку поиска и текст, в котором происходит поиск, на слова? И не проверять наличие определенного слова во множестве слов, вместо составления монструозной регулярки.
я надеюсь, это не попытка вызвать сопливое сочувствие? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Если кроме шуток, то в этом и состоит главная проблема. программа - это реализация алгоритма. Это так, вне зависимости от того, понимаете вы это, или нет. И главная ваша проблема - в отсутствии алгоритма. Вы пишете программу, которая выполняет какие-то действия. Вы пытаетесь заставить выполнять ее какие-то действия. Но при этом эти действия - совсем не то, что вам нужно. |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
![]() |
|||
|
||||
Учащий |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.10.2009 Репутация: -1 Всего: -1 |
Не для слабых умов
![]() Ты хочешь чтобы при вводе в табло поиска слово допустимое в массиве "Привет как дела" выводилось при нахождении, это у тебя получается, а если писать слово как дела привет, то он нечего не находит? Я правельно понял?? |
|||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Блин, я вопрос всего задал. А тут флуда развелось. Вопрос же был не оценки моего знания, либо душевного равновесия. Вопрос касался, а почему это и вот это не работает, как лучше. Что касается стиля программирования, я уж как-нить сам уж... Мануалы почитаю чтоле.. Кто как кодит - какая разница-то? Что за предвзятость-то? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
Zmiuko |
|
|||
![]() http://zmiuko.ru ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 8.10.2008 Репутация: 2 Всего: 2 |
Я так понимаю, что на замечание, что мол все таки по делу надо что-то писать. Это я не о вас, skyboy. Люди здесь обижаются, что-то пишут о политики поставленных задач. Когда основы вполне просты и я сна задача. Даже если что-то не так, можно предупредить о той или иной проблеме.
Второй раз уже. Только первый раз когда спросил, зачем мне описывать то что мол так давно не пишут либо я нечитабельно пишу, мне замечание ставят и в кратковременный бан. Я матерюсь? Унижаю чье-либо достоинство? Не вежлив? Невествен? Оскобляю либо излишне резок? Извините, просто далее обсуждение считаю бессмысленным с такой предвзятостью. Спасибо, что уделили время. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |