반응형
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
반응형
'itsource' 카테고리의 다른 글
venn 다이어그램으로 sql joins (0) | 2022.09.30 |
---|---|
onChange of html 선택 시 매개 변수를 전달하는 방법 (0) | 2022.09.30 |
URL 문자열에서 파라미터를 가져오려면 어떻게 해야 하나요? (0) | 2022.09.30 |
json 필드를 여러 행으로 분할하는 방법 (0) | 2022.09.30 |
MySQL Workbench를 사용하여 MySQL 데이터베이스 백업을 수행하는 방법 (0) | 2022.09.30 |