Я наткнулся на несколько статей (например, этот) и информация, которая предлагает PHP in_array()
проходит через весь массив.
Теперь возможный дубликат этого вопроса здесь: Как работает функция PHP in_array? но ОП, очевидно, был удовлетворен копированием / вставкой определения функции языка Си и никакого дальнейшего описания …
Мой вопрос, однако:
in_array()
действительно пройти через все массив?Я пытался смотреть дальше и идти за ZEND_HASH_FOREACH_KEY_VAL
, но потом это немного запутало:
php_search_array()
… AKA in_arary()
в PHPZEND_HASH_FOREACH_KEY_VAL
а также ZEND_HASH_FOREAC
Единственное, в чем я уверен, так это то, что после итерации происходит на «С-уровне», оно должно быть быстрее, чем «ручное» foreach
…
Действительно ли PHP in_array проходит через весь массив?
TLDR; Нет, это не так.
Как я читаю реализацию C:
Чтобы ответить на ваш вопрос:
php_search_array также вызывает Zend RETURN_TRUE (Осущ: https://github.com/php/php-src/blob/master/Zend/zend_API.h) или наборы RET_VAL и выполняет возврат C; после этого. В обоих случаях выполнение C прерывается итерацией массива, если найдено совпадение.
Других решений пока нет …