Maison  >  Article  >  développement back-end  >  Une brève discussion du code source PHP 16 : à propos de la fonction array_count_values ​​​​​​

Une brève discussion du code source PHP 16 : à propos de la fonction array_count_values ​​​​​​

不言
不言original
2018-06-28 17:31:322401parcourir

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;
EOF

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il vous sera utile. tout le monde apprend. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn