itsource

PHP의 count() 함수는 O(1)입니까, O(n)입니까?

mycopycode 2022. 9. 30. 11:10
반응형

PHP의 count() 함수는 O(1)입니까, O(n)입니까?

정말 PHP 어레이의 모든 요소를 계산합니까?아니면 이 값이 어딘가에 캐시되어 검색되는 것입니까?

출처를 확인할 수 있습니다.

/ext/standard/array.c

PHP_FUNCTION(count) calls: 비패키지 어레이를 호출합니다.이 어레이는 다음과 같이 구현됩니다.

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

    return ht->nNumOfElements;
}

그래서 보시다시피O(1)위해서$mode = COUNT_NORMAL.

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

EDIT: PHP Count Performance(PHP 카운트 퍼포먼스)라는 분석도 흥미로울 수 있습니다.어레이의 길이는 어레이에 의해 유지되지만 콜을 하려면 어레이를 유지하는 것이 더 빠를 것 같습니다.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

반응형