이 글은 주로 PHP 소스 코드에 대한 간단한 토론을 소개합니다. 16: 특정 참조 값을 갖는 array_count_values 함수에 대해 이제 필요한 친구들이 참조할 수 있도록 공유합니다.
PHP 소스 코드에 대한 간단한 토론입니다. 16: array_count_values 함수에 대하여
array_count_values
(PHP 4, PHP 5)
array_count_values — 배열에 있는 모든 값의 발생 횟수를 계산합니다
Description
array array_count_values (배열 입력)
array_count_values()는 입력 배열의 값을 사용하는 배열을 반환합니다. 키 이름으로 이 값이 입력 배열에 나타나는 횟수가 값으로 사용됩니다.
소스 프로그램 설명:
소스 코드의 두 주석은 이 함수의 구현을 설명합니다
/* Initialize return array */ array_init(return_value); /* Go through input array and add values to the return array */
그러나 주의해야 할 몇 가지 세부 사항이 있습니다:
1 이 함수는 문자열과 숫자만 인식할 수 있으므로. 프로그램 다음과 유사한 문이 사용됩니다
if (Z_TYPE_PP(entry) == IS_LONG) {} else if (Z_TYPE_PP(entry) == IS_STRING) {} else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only count STRING and INTEGER values!");}
2. 순회 과정에서 먼저 존재하지 않는지 확인합니다. 이 확인 과정은 문자열과 숫자에 대해서도 다르지만 결국 모두 해시에 대한 작업입니다. table
코드에서 zval의 초기화는 매크로 zval *data를 사용합니다. MAKE_STD_ZVAL(data);
이 매크로 추적의 정의는 다음과 같습니다.
MAKE_STD_ZVAL(data);==> #define MAKE_STD_ZVAL(zv) \ zend.h 586行 ALLOC_ZVAL(zv); \ INIT_PZVAL(zv); ==> #define ALLOC_ZVAL(z) \ ZEND_FAST_ALLOC(z, zval, ZVAL_CACHE_LIST) zend_alloc.h 165行 ==> #define ZEND_FAST_ALLOC(p, type, fc_type) \ (p) = (type *) emalloc(sizeof(type)) zend_alloc.h 152行 ==> #define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) zend_alloc.h 56行==> ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) zend_alloc.c 2288行 程序实现 ==> #define INIT_PZVAL(z) \ zend.h 576行 (z)->refcount = 1; \ (z)->is_ref = 0;
EOF
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 자세한 내용은 PHP 중국어 홈페이지를 참고해 주세요!
관련 권장 사항:
PHP 소스 코드에 대한 간략한 토론 15: array_walk 함수에 대해
PHP 소스 코드에 대한 간략한 토론 14: array_combine 함수에 대해
PHP 소스에 대한 간략한 토론 코드 13: array_change_key_case, array_chunk 소개
위 내용은 PHP 소스 코드 16에 대한 간략한 토론: array_count_values 함수에 대하여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!