count()
은 실제로 PHP 배열의 모든 요소를 계산합니까? 아니면이 값을 어딘가에 캐시하고 검색 만 받습니까?배열에 대해 PHP의 count() 함수는 O (1) 또는 O (n)입니까?
답변
음, 우리는 소스를 볼 수 있습니다 :
ZEND_API int zend_hash_num_elements(const HashTable *ht)
{
IS_CONSISTENT(ht);
return ht->nNumOfElements;
}
: 결과적으로이 방법을 구현 비 재귀 배열에 대한 zend_hash_num_elements()
를 호출
/ext/standard/array.c
PHP_FUNCTION(count)
전화 php_count_recursive()
을, 그러면 알 수 있듯이 의 경우 O(1)
입니다.
PHP 5 이상에서는 길이가 배열에 저장되므로 매번 계산되지 않습니다.
편집 : 흥미로운 분석 결과가 나타날 수도 있습니다 : PHP Count Performance. 어레이의 길이는 배열에 의해 유지되지만, count()
번을 여러 번 호출하는 경우에는 더 빨리 기다리는 것처럼 보입니다.
PHP 5부터 시작하여 변경이 이루어 졌다는 것이 맞을 수도 있습니다. 그러나 PHP 4가 count()에 대한 O (n)이라는 증거는 아직 발견하지 못했습니다. 나는 단지 일화적인 코멘트를 본다. PHP 4의 count() 구현과 같은 증명을 찾을 수 있습니까? 고마워요, –
PHP는 배열의 크기를 내부적으로 저장하지만, 함수 호출을하지 않는 것보다 느린 경우 함수 호출을하고 있으므로, 뭔가를하면 변수에 결과를 저장하는 것이 좋습니다. 루프에서 사용 :
예를 들어,
$cnt = count($array);
for ($i =0; $i < $cnt; $i++) {
foo($array[$i]);
}
을 추가, 당신은 항상 count
이 배열에 호출되고 확신 할 수 없다. 예를 들어 Countable
을 구현하는 객체에서 호출되면 해당 객체의 count
메서드가 호출됩니다.
- 1. memmove() O (n) 또는 O (1)을 고려해야합니까?
- 2. Boost 풀 무료 효율성 O (n) 또는 O (1)
- 3. o (1)의 배열에 링크 목록을 복사 할 수 있습니까 (둘 다 크기가 n입니까?)?
- 4. LinkedList.Clear() O (1)
- 5. Java에서 문자열 x에 대해 s.length()의 런타임 비용은 얼마입니까? 그것은 O (1) 또는 O (n)입니까?
- 6. g ++ -O 옵션에 대해
- 7. O (1) hash look ups?
- 8. java.lang.Object o = 1; // 왜 컴파일됩니까?
- 9. 이것은 무엇을 의미합니까? O (n) steps 및 O (1) space?
- 10. ListBox.FindString 최악의 런타임은 무엇입니까? O (n), O (n log n), O (1)?
- 11. 이 알고리즘의 big-O 비용 함수는 무엇입니까?
- 12. 사전 검색 (O (1)) vs Linq 여기서
- 13. 큰 O
- 14. O (1) 요소 제거의 동적 배열
- 15. O (1) 조회를 사용하는 데이터 전송 객체
- 16. O (1) 시간에 상위 포인터가있는 힙에서 삭제?
- 17. crt0.o 및 crt1.o - 차이점은 무엇입니까?
- 18. 빅 O 표기법 런타임
- 19. 큰 O 작업 수
- 20. O/R Mappers - 좋음 또는 나쁨
- 21. 철저한 검색 Big-O
- 22. 소켓 I/O 모드 epoll, 중복 된 I/O
- 23. C에서의 I/O 메소드
- 24. vim 배경 I/O
- 25. NHibernate O/R 질문
- 26. I/O 읽기 파일
- 27. java.util.Set.remove (Object o) - 문제
- 28. MySQL의 COUNT() 함수는 추정치입니까?
- 29. C 파일 I/O 함수
- 30. 가 어떻게 중복 I/O 사용하여 I/O 완료 포트
왜 테스트하지 않습니까? 요소를 배열에 추가하고 매번 카운트하고 타이밍을 수행하는 루프를 수행하는 것은 간단합니다. –
이 질문을보십시오 : http://stackoverflow.com/questions/2473989/list-of-big-o-for-php-functions –
Google 키워드 -이 질문은 다음과 같이 공식화 될 수도 있습니다 : PHP count() 배열을 반복하거나 배열 속성에서 개수를 검색합니까? –