PHP, in_array и быстрый поиск (в конце) в массивах

Я сомневаюсь, как лучше выполнять быстрый поиск в массивах (я говорю о конкретном случае).

Предположим, у меня есть массив L = [A, B, C] (когда я начинаю). Пока программа работает, L может увеличиваться (но к концу), один из возможных случаев, когда я буду искать, - это L = [A, B, C, D, E].

Дело в том, что что когда я ищу, значения, которые я хочу найти, могут быть только D и E. Теперь я использую find_array (elem, array), но эту функцию нельзя «настроить» для поиска, начиная с конца и уменьшая индекс, и я «боюсь», что при всех поисках функция in_array проверит все элементы с более низкими индексами, прежде чем найдет значение, которое я ищу.

¿Есть еще одна функция поиска, которая лучше подходит для моя проблема? ¿Как работает внутренняя функция in_array?

Заранее спасибо

6
задан castarco 22 June 2011 в 07:47
поделиться

1 ответ

Тонкая настройка обширного сравнительного теста между [1 113]

для числовых и поисков строки, Kasim Kochkin отправил на GitHub, я нахожу следующие результаты

использование php 7.3.11

, использование array_flip однажды и несколько поисков,

  • для сингла к немногим поискам, in_array и array_search быстрее.

  • для поисков строки, зеркальное отражение (однажды) + isset становится быстрее выше 200 поисков.

  • для числовых поисков, зеркальное отражение (однажды) + isset становится быстрее выше 10 поисков.

результаты для Поиска строки

N=1000000 (миллион) in_array: 0,00845003 зеркальных отражения: 0.17343211 isset: 2.86E-6 array_search: 0,00835395 array_key_exists: 5.01E-6

N=100000 in_array: 0,00854707 зеркальных отражения: 0.12469196 isset: 7.15E-6 array_search: 0,00861216 array_key_exists: 6.2E-6

N=10000 in_array: 0,00854087 зеркальных отражения: 0.10549212 isset: 6.91E-6 array_search: 0,00846505 array_key_exists: 4.05E-6

Числовые результаты поиска,

N=1000000 in_array: 0,01197696 зеркальных отражения: 0.06217289 isset: 6.2E-6 array_search: 0,01673698 array_key_exists: 4.05E-6

N=100000 in_array: 0,01191092 зеркальных отражения: 0.06582093 isset: 6.91E-6 array_search: 0,01637983 array_key_exists: 4.05E-6

N=10000 in_array: 0,01375008 зеркальных отражения: 0.07185006 isset: 5.01E-6 array_search: 0,01485705 array_key_exists: 4.05E-6

0
ответ дан 16 December 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: