Dex*_*ter 91 php arrays performance
是否count()真的计算了PHP数组的所有元素,或者这个值是否缓存在某处并且只是被检索?
Vla*_*sny 124
好吧,我们可以看一下来源:
__PRE__
PHP_FUNCTION(count)调用php_count_recursive(),它反过来调用zend_hash_num_elements()非递归数组,这是通过这种方式实现的:
/ext/standard/array.c
所以你可以看到,它是O(1)为了$mode = COUNT_NORMAL.
PHP 在内部存储数组的大小,但您仍然会进行函数调用,这比不进行函数调用要慢,因此,如果您正在执行诸如在环形:
例如,
$cnt = count($array);
for ($i =0; $i < $cnt; $i++) {
foo($array[$i]);
}
Run Code Online (Sandbox Code Playgroud)
此外,您不能总是确定count正在对数组进行调用。Countable例如,如果在实现的对象上调用它,count则将调用该对象的方法。