Я сомневаюсь, как лучше выполнять быстрый поиск в массивах (я говорю о конкретном случае).
Предположим, у меня есть массив L = [A, B, C] (когда я начинаю). Пока программа работает, L может увеличиваться (но к концу), один из возможных случаев, когда я буду искать, - это L = [A, B, C, D, E].
Дело в том, что что когда я ищу, значения, которые я хочу найти, могут быть только D и E. Теперь я использую find_array (elem, array), но эту функцию нельзя «настроить» для поиска, начиная с конца и уменьшая индекс, и я «боюсь», что при всех поисках функция in_array проверит все элементы с более низкими индексами, прежде чем найдет значение, которое я ищу.
¿Есть еще одна функция поиска, которая лучше подходит для моя проблема? ¿Как работает внутренняя функция in_array?
Заранее спасибо
Тонкая настройка обширного сравнительного теста между [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