phparraysperformance

Is PHP's count() function O(1) or O(n) for arrays?


Does count() really count the all the elements of a PHP array, or is this value cached somewhere and just gets retrieved?


Solution

  • Well, we can look at the source:

    /ext/standard/array.c

    PHP_FUNCTION(count) calls php_count_recursive(), which in turn calls zend_hash_num_elements() for non-recursive array, which is implemented this way:

    ZEND_API int zend_hash_num_elements(const HashTable *ht)
    {
        IS_CONSISTENT(ht);
    
        return ht->nNumOfElements;
    }
    

    So you can see, it's O(1) for $mode = COUNT_NORMAL.