|
|
|
Поиск по массиву
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=37741943&tid=1465300]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 420ms |

| 0 / 0 |
