Cet article présente principalement la brève discussion sur le code source PHP 16 : Concernant la fonction array_count_values , elle a une certaine valeur de référence. Maintenant, je la partage avec vous. Les amis dans le besoin peuvent s'y référer
. Une brève discussion sur le code source PHP 10 Six : À propos de la fonction array_count_values
array_count_values
(PHP 4, PHP 5)
array_count_values - compte le nombre d'occurrences de tous valeurs dans le tableau
Explication
array array_count_values (array input)
array_count_values() renvoie un tableau qui utilise la valeur dans le tableau d'entrée comme nom de clé et le nombre de fois où la valeur apparaît dans le tableau d'entrée en tant que valeur.
Description du programme source :
Les deux commentaires dans le code source expliquent l'implémentation de cette fonction
/* Initialize return array */ array_init(return_value); /* Go through input array and add values to the return array */
Mais il y a certains détails auxquels il faut prêter attention :
1. Cette fonction ne peut reconnaître que les chaînes et les nombres, le programme utilise donc des instructions similaires à celles suivantes
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 Pendant le processus de parcours, jugez d'abord s'il n'existe pas. le processus est en Il y a des différences en ce qui concerne les chaînes et les nombres, mais en fin de compte, ce sont toutes des opérations sur des tables de hachage
Dans le code, la macro zval *data; MAKE_STD_ZVAL(data); utilisé pour initialiser zval dans le code pour suivre cette macro La définition est la suivante :
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;
Une brève discussion sur le code source PHP 15 : À propos de la fonction array_walk
Une brève discussion sur Code source PHP 14 : À propos de la fonction array_combine
Une brève discussion sur le code source PHP 13 : Introduction à array_change_key_case, array_chunk
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!