Cet article présente principalement le code source PHP 8 : Introduction à array_pop et array_shift, qui 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
C'est le Nouvel An chinois. . , c'est l'heure des vacances, certaines choses doivent être terminées, et certains s'apprêtent à rentrer chez eux,
C'est la première fois cette année que je ne rentre pas chez moi. . . . .
Il semble que je n'ai pas regardé le code source correspondant depuis une semaine. Vous n'êtes plus motivé ?
Il semble que je ne puisse pas assouplir mes exigences pour certaines raisons, alors j'ai acheté deux livres supplémentaires, je n'ai terminé qu'un des livres que j'ai achetés le mois dernier, donc je dois travailler dur ! . .
On dirait qu'il a dit des bêtises. . .
Dans standard/array.c nous pouvons trouver l'implémentation C des deux fonctions array_pop et array_shift
mixed array_pop (array &array)
array_pop() apparaît et renvoie un tableau Le dernier élément du tableau et décrémente la longueur du tableau de un. Si le tableau est vide (ou n'est pas un tableau), NULL sera renvoyé
Remarque : après avoir utilisé cette fonction, le pointeur du tableau sera réinitialisé (reset())
mixed array_shift ( array &array )
array_shift() Décale le premier élément du tableau et le renvoie comme résultat, décrémente la longueur du tableau d'un et décale tous les autres éléments d'une position. Tous les noms de touches numériques seront modifiés pour compter à partir de zéro et les noms de touches de texte resteront inchangés. Si le tableau est vide (ou n'est pas un tableau), NULL est renvoyé.
Remarque : après avoir utilisé cette fonction, le pointeur du tableau sera réinitialisé (reset())
Les deux fonctions sont utilisées dans l'implémentation
/* {{{ proto mixed array_pop(array stack) Pops an element off the end of the array */PHP_FUNCTION(array_pop){ _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);}/* }}} */ /* {{{ proto mixed array_shift(array stack) Pops an element off the beginning of the array */PHP_FUNCTION(array_shift){ _phpi_pop(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);}
Le programme détermine d'abord le input, puis déterminez s'il y a des éléments dans le tableau. Si le tableau est vide, retournez directement
S'il s'agit d'un array_pop :
==>zend_hash_internal_pointer_end
==>zend_hash_internal_pointer_end_ex(ht, NULL. )
Ceci renvoie directement le dernier élément de la liste doublement chaînée dans la table de hachage ht->pInternalPointer = ht->pListTail;
S'il s'agit de array_shift :
==>zend_hash_internal_pointer_reset( Z_ARRVAL_PP(stack));
==>zend_hash_internal_pointer_reset_ex(ht, NULL)
À ce stade, le premier élément de la liste doublement chaînée dans la table de hachage est renvoyé directement ht->pInternalPointer = ht-> pListHead;
Récupérez la valeur de retour via
zend_hash_get_current_data ==> zend_hash_get_current_data_ex(ht, pData, NULL) p = pos ? (*pos) : ht->pInternalPointer;*pData = p->pData;
Obtenez la valeur dans la table de hachage
Puis supprimez la valeur clé dans la table de hachage et appelez zend_hash_internal_pointer_reset pour réinitialiser la table de hachage
Cette réinitialisation est la suivante : ht->pInternalPointer = ht-> pListHead;
définit la position actuelle sur le premier élément de la liste chaînée.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. 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 7 : à propos des fonctions nl2br, ltrim, rtrim, trim
Une brève discussion du code source PHP six : à propos de la fonction stream_get_wrappers
Une brève discussion du code source PHP cinq : à propos de la création d'un tableau
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!