> 백엔드 개발 > PHP 튜토리얼 > PHP 소스 코드 4에 대한 간략한 토론: count 함수에 대하여

PHP 소스 코드 4에 대한 간략한 토론: count 함수에 대하여

不言
풀어 주다: 2023-04-01 21:50:02
원래의
2036명이 탐색했습니다.

이 글에서는 주로 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), &#39;<br />&#39;;
 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 소스 코드 1: 분해 및 내부 분해 함수

위 내용은 PHP 소스 코드 4에 대한 간략한 토론: count 함수에 대하여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿