이 글에서는 주로 PHP 소스 코드 4에 대해 소개합니다. 카운트 기능에 대해서는 특정 참조 값이 있습니다. 이제 도움이 필요한 친구들이 참조할 수 있습니다.
카운트 기능은 일부 인터뷰나
배열이 아닌 카운트 처리의 경우
코드에서 확인할 수 있습니다
PHP_FUNCTION(count){ zval *array; long mode = COUNT_NORMAL; if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE) return; switch (Z_TYPE_P(array)) { case IS_NULL: // 空值处理 RETURN_LONG(0); break; case IS_ARRAY: // 处理数组,包括其是递归 RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC)); break; case IS_OBJECT: { #ifdef HAVE_SPL /* it the object implements Countable we call its count() method */ zval *retval; if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) { zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval); if (retval) { convert_to_long_ex(&retval); RETVAL_LONG(Z_LVAL_P(retval)); zval_ptr_dtor(&retval); } return; } #endif /* if not we return the number of properties (not taking visibility into account) */ if (Z_OBJ_HT_P(array)->count_elements) { RETVAL_LONG(1); if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value) TSRMLS_CC)) { return; } } } default: // 其它情况,如考试中常见的字符串等 RETURN_LONG(1); break; }}
설명서에 설명되어 있습니다.
객체의 경우 SPL이 설치되어 있으면 count()를 호출하는 셀 수 있는 인터페이스입니다. 이 인터페이스에는 count() 함수의 반환 값을 반환하는 메서드 count()가 하나만 있습니다.
배열 길이 통계의 경우 모드가 기본값(0)을 사용하면 1차원 배열의 길이만 표시됩니다.
코드는 아래와 같습니다
$arr = array(1, 2, 3); $arr2 = array($arr, $arr); echo count($arr2), '<br />'; echo count($arr2, 1); /* 输出结果:28*/
1차원 배열만 사용하는 경우 nNumOfElements 속성이면 충분합니다
이를 구현하는 코드는 다음과 같습니다.
// php_count_recursive函数 array.c 251行cnt = zend_hash_num_elements(Z_ARRVAL_P(array)); ZEND_API int zend_hash_num_elements(HashTable *ht){ IS_CONSISTENT(ht); return ht->nNumOfElements;}
HashTable의 간단한 작업을 직접 실행하려면 PHP에서 간단한 HashTable 예제를 클릭하세요. 소스 코드
배열 저장이나 순회 방법을 보고 이해하려면 브라더버드의 PHP 배열 심층 이해(순회 순서)를 클릭하세요
재귀가 시작되면 count($arr, 1)
프로그램은 php_count_recursive 함수를 재귀적으로 호출합니다.
HashTable의 경우 프로그램은 이 차원 배열이 포함된 이중 연결 목록을 순회합니다. 그런 다음 모든 노드가 순회될 때까지 각 노드에 저장된 pData를 재귀적으로 순회합니다
[Feeling]
HashTable 매우 강력합니다. 배열의 길이를 계산하거나 count 함수를 호출하려는 경우 바퀴를 다시 만드는 것은 고마운 일이 될 것입니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!
관련 권장사항:
PHP 소스 코드 3에 대한 간략한 토론: strrchr, strstr, stristr 함수 정보
PHP 소스 코드 2에 대한 간략한 토론: strlen, strtolower, strtoupper, ord, chr 함수
위 내용은 PHP 소스 코드 4에 대한 간략한 토론: count 함수에 대하여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!