Maison  >  Article  >  développement back-end  >  Une brève discussion sur le code source PHP 10 : à propos des fonctions array_keys, array_values ​​​​​​

Une brève discussion sur le code source PHP 10 : à propos des fonctions array_keys, array_values ​​​​​​

不言
不言original
2018-06-28 17:03:012199parcourir

Cet article introduit principalement une brève discussion sur le code source PHP 10 : Concernant les fonctions array_keys et array_values ​​​​, il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

<.>Le premier de la nouvelle année Cet article, tout d'abord, je voudrais souhaiter une bonne année à tous mes amis

J'ai eu le temps aujourd'hui de lire le code et d'écrire quelque chose en souvenir !

array array_keys (array input [, Mixed search_value [, bool strict]] )

array_keys() renvoie le nom de clé du nombre ou de la chaîne dans le tableau d'entrée.

Si le paramètre facultatif search_value est spécifié, seul le nom de clé de la valeur sera renvoyé. Sinon, toutes les clés du tableau d'entrée seront renvoyées. Depuis PHP 5, vous pouvez utiliser le paramètre strict pour effectuer des comparaisons d'égalité (===).

La fonction array_keys est implémentée à la ligne 2416 du fichier standard/array.c PHP_FUNCTION(array_keys)

Le programme suit le style PHP habituel et détermine d'abord si l'entrée est correcte si elle est correcte. est un troisième paramètre, puis la fonction qui détermine la taille utilise is_identical_function (la fonction is_equal_function est utilisée par défaut)

Initialise ensuite le tableau renvoyé, parcourt le tableau donné, prend la valeur clé de chaque élément et l'attribue au tableau renvoyé.Cette valeur clé est divisée en Il existe deux types de nombres et de chaînes. La fonction la plus importante est la fonction d'opération de hachage zend_hash_get_current_key_ex (obtenir la valeur clé de l'élément actuel)

  ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos){
    Bucket *p; 
    p = pos ? (*pos) : ht->pInternalPointer; 
    IS_CONSISTENT(ht);     if (p) {
        if (p->nKeyLength) {    //    数字型的nKeyLength长度为0
            if (duplicate) {
                *str_index = estrndup(p->arKey, p->nKeyLength - 1);
            } else {
                *str_index = p->arKey;    //    /* arKey存储key名称(字符串类型的key)必须是最后一个成员,*/
            }
            if (str_length) {
                *str_length = p->nKeyLength;
            }
            return HASH_KEY_IS_STRING;
        } else {
            *num_index = p->h;    //    存储数字key值
            return HASH_KEY_IS_LONG;
        }
    }
    return HASH_KEY_NON_EXISTANT;}
La compréhension de. cette fonction dépend principalement de la compréhension de la définition du bucket

Pour le contenu lié au bucket, veuillez vous rendre sur http://www.php.cn/php-weizijiaocheng-405316.html

array array_values ​​​​(array input)

array_values() Retour Toutes les valeurs du tableau d'entrée sont indexées numériquement.

La fonction array_values ​​​​est fondamentalement similaire à l'implémentation de la fonction array_keys, et il lui manque également une opération zend_hash_get_current_key_ex et une opération pour déterminer le type de valeur

Ce qui précède est tout le contenu de cet article. j'espère que cela sera utile à l'apprentissage de tout le monde. Plus Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Une brève discussion du code source PHP neuf : Introduction à array_unshift, array_push

Une brève discussion du code source PHP huit : Introduction à array_pop, array_shift

Une brève discussion du code source PHP 7 : À propos des fonctions nl2br, ltrim, rtrim, trim

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