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
해당 객체 의 메서드가 호출됩니다.