Maison  >  Article  >  développement back-end  >  Une brève discussion sur le code source PHP neuf : introduction à array_unshift, array_push

Une brève discussion sur le code source PHP neuf : introduction à array_unshift, array_push

不言
不言original
2018-06-28 16:58:532290parcourir

Cet article présente principalement le code source PHP 9 : Introduction à array_unshift et array_push. 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

Aujourd'hui, c'est le chinois. Nouvelle Année, je souhaite à tous mes amis une bonne année et tout le meilleur !

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

int array_unshift (array &array, Mixed var [, Mixed ...])

array_unshift( ) will La cellule transmise est insérée au début du tableau tableau. Notez que les cellules sont insérées dans leur ensemble, donc les cellules entrantes resteront dans le même ordre. Tous les noms de touches numériques seront modifiés pour commencer à compter à partir de zéro, et tous les noms de touches textuelles resteront inchangés.

Renvoie le nouveau nombre de cellules dans le tableau tableau.

Dans la ligne 2080 de standard/array.c, vous pouvez voir l'implémentation C de cette fonction PHP_FUNCTION(array_unshift)

Le programme déterminera d'abord si le nombre de paramètres d'entrée est correct Si. il est inférieur à 2, signalez une erreur
puis déterminez si le premier paramètre est un tableau. Sinon, signalez une erreur et quittez
puis le programme appellera new_hash = php_splice(Z_ARRVAL_P(stack), 0. , 0, &args[1], argc-1, NULL) ;

HashTable* php_splice(HashTable *in_hash, int offset, int length, zval ***list, int list_count, HashTable **supprimé)
Cette fonction se trouve à la ligne 1861 de array.c
Elle copiera d'abord une partie de in_hash (table de hachage d'origine) dans la nouvelle table de hachage. Cette partie est calculée en fonction du décalage et de la longueur donnés par array_unshif. sont tous deux 0, donc aucun élément n'est copié dans la nouvelle table de hachage
parcourt ensuite la liste, crée un zval pour chaque élément et l'insère dans la nouvelle table de hachage
en utilisant zend_hash_next_index_insert, puis copie les éléments restants dans in_hash vers la nouvelle table de hachage. Ici, puisque offset et length sont tous deux 0 , donc tout est hashtable
Enfin, renvoyer la table de hachage nouvellement générée
L'ensemble du processus équivaut à écrire d'abord les données de la liste dans la table de hachage. , puis écrire les anciennes données dans la table de hachage, réalisant ainsi le devant du tableau Insérer des éléments

puis supprimer la table de hachage où se trouve l'ancien tableau et actualiser la nouvelle HashTable, et réinitialiser le pointeur interne du hashtable.
Renvoie le nombre d'éléments dans la table de hachage (c'est-à-dire la longueur du tableau nouvellement généré)

int array_push ( array &array, Mixed var [, Mixed ...] )

array_push() traite le tableau comme une pile et pousse les variables transmises à la fin du tableau. La longueur du tableau augmentera en fonction du nombre de variables placées sur la pile.
Le même effet que :

   <?php$array[] = $var;?>

Et répétez l'action ci-dessus pour chaque var.

Renvoie le nouveau nombre total de cellules dans le tableau.

Cette implémentation est relativement simple :
parcourez directement les paramètres donnés, créez un zval pour chaque élément, ajoutez-en un à sa référence et ajoutez-le à la fin de la table de hachage où se trouve le tableau.
Renvoie le nombre d'éléments dans la table de hachage (c'est-à-dire la longueur du tableau nouvellement généré)

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

Recommandations associées :

Une brève discussion sur le code source PHP 8 : Introduction à array_pop, array_shift

Une brève discussion sur la source PHP code 7 : À propos de la fonction nl2br, ltrim, rtrim, trim

Une brève discussion du code source PHP 6 : À propos de la fonction stream_get_wrappers

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