![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Что-то мозги кипят и ни как не могу сообразить как реализовать... попробую объяснить задачу..
есть массив со значениями следующей структуры [string][-][int][-][int][-][string] Пример array('asd_qwe-1-0-qwe', 'qw_we-0-0-fr-ds', 'as_df-2-3-qwe') Строки начинаются с буквы, но могут содержать и цифры и тире Условия такие 1. Точное совпадение если нет в нуля 2. если есть ноль, то в значение может быть любым, по типу * -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 2 Всего: 315 |
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
немного не так объяснил наверное..
значения для поиска могут быть такие же как и то что ищут, вернее имеют тот же формат (состоят из 4 блока разделённых 'тире') где ищем -> что ищем 'asd_qwe-1-0-qwe' -> 'asd_qwe-1-0-' 'qw_we-0-0-fr-ds' -> qw_we-0-0-fr-ds' 'as_df-2-3-qwe' -> 'as_df-2-0-qwe' Думаю поиск должен быть регуляркой что-то типа
Это сообщение отредактировал(а) Gold Dragon - 19.6.2012, 07:15 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
а вопрос то в чем?
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
есть таблица с данными, в т.ч. и с тем что искать.
Есть массив в котором есть данные которые уже указывал. Необходимо листать данные полученные из таблицы и проверять одно поле на совпадение его в массиве Идеальным вариантом было бы найти в массиве значение используя регулярку.. Но что-то такой простой функции типа in_array() нет (или я не знаю). Вот нужно придумать что-то своё и чтобы скорость не съедало -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
т.е. поиск в базе? ну так строишь регулярку, соответствующую всем шаблонам из массива используя mysql regexp
|
|||
|
||||
| Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
нет же
1. есть массив
2. есть данные из базы. 3. Есть цикл
в котором получаются данные, а так же формируется строка проверки в формате, в котором есть в массиве 4. в цикле необходимо проверять данные из массива и сформированное значение. 5. Пример. - в массиве есть значение "com-qwer-5-0-" - сформировалось - "com-qwer-5-2-asd" 6. значения состоят из 4-х частей всегда, разделённое тире А-Б-В-Г А - латиница, подчёркивание, тире, цифры Б - только цифры В - только цифры Г - латиница, подчёркивание, тире, цифры, может быть пустым 7. Из примера. - В массиве А = com-qwer Б = 5 В = 0 Г = - В сформированном А = com-qwer Б = 5 В = 2 Г = asd Если в массиве в Б или В ноль, то в сформированном значение игнорируется и при сравнении всегда ИСТИНА Если в массиве в Г "", то в сформированном значение игнорируется и при сравнении всегда ИСТИНА В примере значения "равны" вот в этом примере ЛОЖ - в массиве есть значение "com-qwer-5-2-" - сформировалось - "com-qwer-5-0-asd" -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
||||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
да я уже объяснял же(!) ну куда подробнее?? не важно как они формируются, важно что они имеют вот такое значение
Вот регулярка для расклада
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 2 Всего: 137 |
А что если разбить строку через explode и проверить 1 и 2 элементы на равенство нулю?
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
explode не получится, только регуляркой. Тире может быть и в первом и в последнем блоке, кроме разделителей
Добавлено через 57 секунд а накидал один способ, у меня работает. Упростил как мог, но всё равно сложный получился.. сейчас выдерну из скрипта и выложу -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: нет Всего: 42 |
Это жесть Зачем нужна строка, которая не строка, а структура? Для чего себе создавать геморрой? -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Fortop, если нет решения, то философия мне не нужна(!) без обид. Возьми любой серийный номер любой техники - это строка, которая и есть зашифрованная структура.
Я имею набор таких "серийников" и у меня есть с чем их сравнивать. Так вот мне нужно или каждое значение из "справочника" приводить в структуру и сравнивать или структуру привести в строку и сравнить.. Второй вариант намного энергоёмкостнее -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: нет Всего: 42 |
Это не философия. Философия у вас в постановке задачи. Сравнить жопу с пальцем наиболее эффективным способом - это не задача. И решения нет по той причине, что нет проблемы. Какая конечная цель? Найти серийник? Или найти ряд серийников? Если ряд серийников, то по каким критериям? По маске? Какие правила формирования маски? Вам задали вполне правильный вопрос Потому что это влияет на то, как решать задачу. Добавлено через 5 минут и 8 секунд Кстати, с чем все же сравниваются серийники? -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| Gold Dragon |
|
||||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
А прочитать то что я уже написал выше не судьба? Или там так очень кратко написано? особенно тут? http://forum.vingrad.ru/index.php?showtopi...t&p=2498560 Что за трёп? только слова и ничего больше, ни вопроса ни ответа, только эмоциональные жаргонизмы. Читай лучше мои пояснения. если не понятно задавай вопросы. Уже несколько раз сказал и про маску и про то какие данные, и с примерами, и с чем сравнивать Добавлено через 9 минут и 39 секунд вот рабочий код. Код выдернут из движка. Упростил как смог сам метод
Значение $arr
Значение $selected
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||||
|
|||||||
| Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: нет Всего: 42 |
Там каша. По сути вашего описания в массиве находятся маски. И вы хотите найти подходящие под них значения в БД. Вам вполне конкретно ответили
А это ваш ответ Что-то еще нужно прочитать? Или вам нужно таки понять, что же вы делаете? Если в массиве не маски, то что? Плюс в этом случае остается актуальным вопрос И дальше будете продолжать играть в шпиона? Или озвучите внятно стоящую задачу? Без ваших додумываний о том, что лежит в базе и с чем его надо сравнивать.... Добавлено через 1 минуту и 25 секунд Ну таки структура, которую вы зачем-то приводите к строке. Зачем? -------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Fortop, всё понятно, читать и понимать просто лень... бывает.. тогда так
То что ты называешь масками тоже являются значениями, например, "com_boss-6-6-" означает 1. com_boss - применимо для компонента com_boss и это значение должно содержаться в ($_GET или $_POST) в option 2. 6 - распространяется если компонент com_boss и категория с ID=6 3. 6 - распространяется если компонент com_boss, категория с ID=6 и каталог ID=6 4. '' - означает что привязка к разделам каталога не осуществляется Эти значения являются своеобразными идентификаторами URL, так же используются в VALUE в <FORM>, ну и ещё кое где Этот список более-менее постоянный и достаточно большой Далее с чем сравнивать или что сравнивать. В данном случае это как настроен определённый отображаемый объект на сайте. Например, если у нас в третьей части стоит ноль, то это означает что нам доступны данные не только из каталога ID=6, а из всей категории. Если там что-то иное чем ноль, то тогда уже реагируем на значение ps хотя я уже не знаю как объяснить.. смотри код, может так поймёшь. Код рабочий и мои требования выполняет Добавлено через 45 секунд не понял предложения -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: нет Всего: 42 |
Acl знакомо?
Можно посмотреть Zend_Acl phpgacl Вот туда и копать. А сравнивать в этом(вашем) случае лучше не строки, а таки структуры по уровням иерархий. Это сообщение отредактировал(а) Fortop - 20.6.2012, 14:58 -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
вот у нас есть функции которые ищут в строке строку по регулярным правилам. А мне нужно чтобы точно так же, но только поиск в массиве... Вот собственно к чему вся эта тема
а это вообще зачем? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: нет Всего: 42 |
http://en.wikipedia.org/wiki/Access_control_list А ноги растут отсюда. Т.е. вам нужно определить доступен ли элемент иерархии. -------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
я читал внимательно и непониманием не страдаю. однако прекратил анализ Вашей задачи лишь потому что Вы её толком не сформулировали, а догадываться на основе ваших обмолвок и многакода желания и времени нет.
если вопрос только в этом (хотя полагаю такая формулировка не полна или даже неверна), то постройте одно регулярное выражение из всех элементов массива, части которого разделены предикатом "|" (или). это соответствует Вашим словам, но слишком просто что бы быть правдой |
||||
|
|||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Fortop, к сожалению я лучше знаю русский чем английский.
baldina, что не понятно в этом ответе? http://forum.vingrad.ru/index.php?showtopi...t&p=2498560 именно да. это просто на словах. реализация получилась такая, которую я показал. Задачи изначально стояла именно искать в массиве строку из другого массива при помощи регулярки... Конечно цель основная другая, но мне нужно именно этот кусок. Тему можно закрыть. Реализацию я сделал, может не оптимальную, но работает. Со временем поправлю. Просто очень много времени потратил на перебранки, за что прошу прощение если кого обидел ненароком ;) Ответ получился простой: строку в строке регуляркой искать можно, в массиве нет, для поиска в массиве нужно изобретать что-то иное.. -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Evghenusi |
|
|||
![]() майский жук ![]() ![]() Профиль Группа: Участник Сообщений: 506 Регистрация: 3.8.2006 Где: Молдова, Кишинёв Репутация: 2 Всего: 15 |
почитал, офигел.
может?
хотя наверно мимо, но всё равно оставлю сообщение, авось... |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Evghenusi, вопрос то не в регулярке... Нужно найти значение из одного массива в другом при помощи регулярки
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
array_filter сначала — БД и массив. потом — два массива. потом — два массива и регулярки. как только казалось, что начинаю понимать — попадалось новое сообщение, додказывающее обратное. общий совет: хочешь скорости, уходи от регулярок. раз у тебя строка имеет определенную структуру, то парсь её сразу же и работай уже со структурой, а не с трехэтажными регулярками. |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
array_filter - видимо это то что я искал
Добавлено через 2 минуты и 55 секунд
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: нет Всего: 42 |
Есть на русском http://ru.wikipedia.org/wiki/ACL Суть в том, как организовать наследование прав доступа и определить доступен ли данный элемент для действий. Там же попутно решается тот вопрос, который вы разбирали в этой теме. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 1 Всего: 71 |
Fortop, это слишком сложно. Задача намного проще.. и я вроде её уже порешал.. сейчас ещё попробую с array_filter поиздеваться...
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Тексты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |