PHP 的 in_array 真的遍历整个数组吗?

Does PHP's in_array really go through the whole array?

我无意中发现了一些文章(例如 this one)和建议 PHP 的 in_array() 贯穿整个数组的信息。

现在这里可能重复了这个问题: 但是 OP 显然对 C 语言函数定义的 copy/paste 感到满意,没有进一步描述...

然而我的问题是:

PHP的in_array()真的遍历整个数组吗?

我试图看得更远,并追寻 ZEND_HASH_FOREACH_KEY_VAL,但后来有点混乱:

我唯一确定的是自从 ??迭代??发生在“C 级”它应该比“手动”快 foreach...

Does PHP's in_array really go through the whole array?

TLDR; 不,不是。

我阅读C实现的方式:

  1. ZEND_HASH_FOREACH_KEY_VAL 或者 ZEND_HASH_FOREACH 使用指向当前元素的指针遍历数组数据桶。
  2. 每次迭代,元素指针都赋值给变量entry in void php_search_array
  3. 找到匹配后,PHP 列表项本身或 PHP 布尔值由引擎根据 行为 return 编辑 给函数的参数。

回答你的问题:

php_search_array 调用 Zend RETURN_TRUE(实现:https://github.com/php/php-src/blob/master/Zend/zend_API.h)或设置 RET_VAL 并执行 C return;然后。在这两种情况下,如果找到匹配项,C 执行就会中断数组的迭代。