|
|
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Есть ассоциированый массив $arr 6000 элементов. Есть строка $str Необходимо осущиствить поиск вложения по массиву этой строки $str, т.е. пример Код: php 1. 2. 3. 4. 5. 6. обычный array_search ее не находит, так как он ищет строго равенство, как можно реализовать максимально быстро онное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 18:50:41 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
даже задача выглядит так: есть массив из строк, надо найти в другом массиве вложение из любого элемента данного массива, т.е. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 18:53:20 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
отсортировать и потом перебирать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 19:15:33 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
а хотя с учетом того, что любое вхождение, тогда так или иначе придется проверять каждую строку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 19:16:14 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Ренат, Для первой задачи решение есть такой: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. Для второй что-то типа тоже можно придумать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 22:53:47 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
авторstrpos($element, $str) несработает для utf-8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 09:51:27 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторstrpos($element, $str) несработает для utf-8 данные все в cp1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 10:38:09 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
даже если были бы в другой кодировке, заменить функцию поиска подстроки не проблема ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 10:46:14 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторstrpos($element, $str) несработает для utf-8Да с чего это не стработает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 10:54:36 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
На латинице может и сработает, на кириллице - нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 12:08:38 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
HettНа латинице может и сработает, на кириллице - нет Значения все в латинице, мне нужен имено алгоритм максимально быстрого поиска (как я понимаю используя встреоные функции по раьботе с массивами). Оыбчный цикл в цикле есть пол секунды, что очень долго. Арау фильтер тоже есть больше чем обычный пробег по массиву ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 14:04:10 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
этот массив откуда берется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 14:13:31 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
там видимо не сам цикл жрет время, а именно функция strpos ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 14:14:13 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
серилизовать и регексом вытащить, по скорости не знаю как это будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 14:16:56 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
SmeL_mdсерилизовать и регексом вытащить, по скорости не знаю как это будет Береться от функции get_defined_constants(true)['user'], если сериализовать - то как быть с цифрами: s:14:"asdasd" указывающие на длину строки? Мне необходимо заменить одно значение на другое, длина строки увеличиться, и десирилизация не сработает. Да и превратить 6000 элементов в строки, кажадя коснтанта в районе 200 символов, получим строку в районе милиона символов, и копаться в ней будет накладней чем просто пробежаться по массиву ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 14:56:31 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Ренат, • Мне необходимо заменить одно значение на другое изначально об этом не было и слова, Может просто define переделать, на то они и дефайны чтоб их не изменять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 15:13:02 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
SmeL_md, нет, переделка контант происходит после загрузки всех констант, да еще и по ходу выполнения заменять надо не одну сотню раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 15:19:09 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
автор если сериализовать - то как быть с цифрами: s:14:"asdasd" указывающие на длину строки json_encode ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 15:35:06 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
.... если в проекте используется БД - может положить туда, и не мучится? использовать тупо оператор like .... код короткий, решение - масштабируемое. глупый возможно вопрос - а откуда этот ассоциированный массив берется изначально, и куда кладется потом? Иногда решение частной задачи лучше искать зная общий контекст. "Быстро" - насколько? в смысле - если супероптимизировать работу со строками в этом участке кода, а рядом будет жрать процессорное время фреймворк, работающий поверх тормозной БД - выигрышь никто не заметит .... может оно и извлекается из базы? ну не в коде же 6000 констант прописаны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 19:07:51 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Ого обсуждение =))) А как же http://www.php.net/manual/en/function.preg-grep.php ? P.S.: Для задачи поиска нескольких значений сразу можно array('test1', 'find2') слить в регулярку /test1|find2/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 19:18:56 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovБД - может положить туда, и не мучится? Ну это уже как раз мучаться. Вот если бы какая-то агрегация нужна была - другое дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 19:19:51 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Ренат, Ну, например, мой вариант, пробежавшись по массиву из 6000 произвольных 32-символьных хэшей, нашел 140 элементов, в которых встретились 3-хбуквенные сочетания из массива размером 4 элемента за 0.078 сек А вот 40000 элементов уже обрабатывал 0.527 сек. Вроде бы вполне адекватное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 03:30:51 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
А с preg_grep сравни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 05:45:48 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov.... если в проекте используется БД - может положить туда, и не мучится? использовать тупо оператор like .... код короткий, решение - масштабируемое. глупый возможно вопрос - а откуда этот ассоциированный массив берется изначально, и куда кладется потом? Иногда решение частной задачи лучше искать зная общий контекст. "Быстро" - насколько? в смысле - если супероптимизировать работу со строками в этом участке кода, а рядом будет жрать процессорное время фреймворк, работающий поверх тормозной БД - выигрышь никто не заметит .... может оно и извлекается из базы? ну не в коде же 6000 констант прописаны? Все контанты прописаны в коде. Беруться я уже писал от get_defined_constants(true)['user']. Цель: в них встречаются определенные имена таблиц вида: ххххх.yyyyyy , надо заменить на ххххххх.zzzzzzz. Засунуть все в базу, потом лайком пройтись, и потом удалить все? Не накладно ли будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 09:50:50 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
preg_grep в понедельник првоерю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 09:54:40 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Ренат, Опишите тогда задачу целиком может идея с массивом вообще можно забыть. Как я понимаю у Вас проблема в том что нужно изменять имена таблиц, возможно даже не имена а только схемы, тогда это можно решить одним запросом к базе установив схему по умолчанию на уровне сессии. Возможно есть смысл создать представления,либо просто создать таблицу соответствий schema1.table1 => schema2.table2 Как по мне то тут нужно решать не проблему 6000 массива, а то что приводит к нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 21:52:05 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
Там 6000 таблиц? о_О ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2012, 21:59:31 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
HettТам 6000 таблиц? о_О таблиц несколько тысяч, но это не принципиально SmeL_mdРенат, Опишите тогда задачу целиком может идея с массивом вообще можно забыть. Как я понимаю у Вас проблема в том что нужно изменять имена таблиц, возможно даже не имена а только схемы, тогда это можно решить одним запросом к базе установив схему по умолчанию на уровне сессии. Возможно есть смысл создать представления,либо просто создать таблицу соответствий schema1.table1 => schema2.table2 Как по мне то тут нужно решать не проблему 6000 массива, а то что приводит к нему. Можно поподробней насчет схем? Представления отпадают ввиду того что данные беруться из коснтант а не выборке из базы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 10:50:30 |
|
||
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#18+
РенатМожно поподробней насчет схем? Представления отпадают ввиду того что данные беруться из коснтант а не выборке из базыНе знаю какой СУБД Вы пользуетесь, особо внятно не написано на WIKI но ключевые там слова. Она может включать другие объекты Представте что в вашей базе n количество баз, поидеи так у вас и есть если Вы написали ххххх.yyyyyy , надо заменить на ххххххх.zzzzzzz где ххххх и ххххххх это различные схемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 11:26:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=23&tid=1465300]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 537ms |

| 0 / 0 |
