반응형
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
반응형
'IT story' 카테고리의 다른 글
nodejs 로그 파일은 어디에 있습니까? (0) | 2020.09.05 |
---|---|
RecyclerView에서 특정 항목을 업데이트 / 새로 고침하는 방법 (0) | 2020.09.05 |
지도에 요소를 삽입하는 권장 방법 (0) | 2020.09.05 |
크롬 브라우저에서 로케일을 변경하는 방법 (0) | 2020.09.05 |
좋은 C # 예제로 Liskov Substitution Principle을 설명 할 수 있습니까? (0) | 2020.09.05 |