Как внутренне работает функция in_array?
Внутренне in_array()
выполняет поиск от начала до конца массива. Так что в вашем случае это медленно.
В зависимости от характера ваших данных вы можете изменить стратегию поиска. Если у вас есть только неповторяющиеся значения и все значения являются либо строковыми, либо целыми (не NULL
), обычным трюком является array_flip()
массив, который работает довольно быстро, а затем проверьте, есть ли запись для вашего значения в качестве ключа в хэше массива через isset()
:
$array = array( ... non-duplicate string and integer values ... );
$needle = 'find me!';
$lookup = array_flip($array);
$found = isset($lookup[$needle]) ? $lookup[$needle] : false;
if (false === $found) {
echo "Not found!\n";
} else {
echo "Found at {$found}!\n";
}
Если эти предварительные условия не выполняются, вы можете сделать то, что предложено konforce .
Если у вас действительно много данных, и вы смотрите не только с начала или с конца, вам может потребоваться реализовать один алгоритм поиска самостоятельно, например, не начиная с начала и не заканчивая, а оборачивая и / или начать со случайной позиции, чтобы распределить время поиска.
Кроме того, вы можете сохранять элементы отсортированными при добавлении в массив, возможно, который затем можно будет найти намного быстрее с помощью алгоритма подбора.