Действительно ли PHP in_array проходит через весь массив?

Я наткнулся на несколько статей (например, этот) и информация, которая предлагает PHP in_array() проходит через весь массив.

Теперь возможный дубликат этого вопроса здесь: Как работает функция PHP in_array? но ОП, очевидно, был удовлетворен копированием / вставкой определения функции языка Си и никакого дальнейшего описания …

Мой вопрос, однако:

Есть ли у PHP in_array() действительно пройти через все массив?

Я пытался смотреть дальше и идти за ZEND_HASH_FOREACH_KEY_VAL, но потом это немного запутало:

Единственное, в чем я уверен, так это то, что после итерации происходит на «С-уровне», оно должно быть быстрее, чем «ручное» foreach

0

Решение

Действительно ли PHP in_array проходит через весь массив?

TLDR; Нет, это не так.

Как я читаю реализацию C:

  1. ZEND_HASH_FOREACH_KEY_VAL или, скорее, ZEND_HASH_FOREACH выполняет итерации по массиву данных массива с указателем на текущий элемент.
  2. Указатель элемента присваивается переменной запись в void php_search_array за каждую итерацию.
  3. Когда совпадение найдено, движок возвращает сам элемент списка PHP или PHP bool в зависимости от поведение аргумент, данный функции.

Чтобы ответить на ваш вопрос:

php_search_array также вызывает Zend RETURN_TRUE (Осущ: https://github.com/php/php-src/blob/master/Zend/zend_API.h) или наборы RET_VAL и выполняет возврат C; после этого. В обоих случаях выполнение C прерывается итерацией массива, если найдено совпадение.

1

Другие решения

Других решений пока нет …