IT story

PHP의 count () 함수는 배열에 대해 O (1) 또는 O (n)입니까?

hot-time 2020. 9. 5. 10:36
반응형

PHP의 count () 함수는 배열에 대해 O (1) 또는 O (n)입니까?


count()실제로 PHP 배열의 모든 요소를 ​​계산 합니까 , 아니면이 값이 어딘가에 캐시되어 검색됩니까?


음, 우리는 소스를 볼 수 있습니다.

/ext/standard/array.c

PHP_FUNCTION(count)전화 php_count_recursive()차례로 호출 zend_hash_num_elements()이 방법을 구현 비 재귀 배열을 위해 :

ZEND_API int zend_hash_num_elements(const HashTable *ht)
{
    IS_CONSISTENT(ht);

    return ht->nNumOfElements;
}

당신이 볼 수 있도록, 그건 O(1)위해 $mode = COUNT_NORMAL.


PHP 5+에서는 길이가 배열에 저장되므로 매번 계산이 수행되지 않습니다.

편집 :이 분석이 흥미로울 수도 있습니다 : PHP Count Performance . 배열의 길이는 배열에 의해 유지되지만 count()여러 번 호출 할 경우 보유하는 것이 더 빠른 것처럼 보입니다 .


PHP는 배열의 크기를 내부적으로 저장하지만, 생성하지 않는 것보다 느린 경우에도 여전히 함수 호출을 수행하고 있습니다. 따라서 배열을 사용하는 것과 같은 작업을 수행하는 경우 결과를 변수에 저장하고 싶을 것입니다. 고리:

예를 들면

$cnt = count($array);
for ($i =0; $i < $cnt; $i++) {
   foo($array[$i]);
}

또한 count배열에서 호출되고 있는지 항상 확인할 수는 없습니다 . Countable예를 들어 구현하는 객체에서 호출되면 count해당 객체 메서드가 호출됩니다.

참고 URL : https://stackoverflow.com/questions/5835241/is-phps-count-function-o1-or-on-for-arrays

반응형