Maison  >  Article  >  développement back-end  >  Une brève discussion du code source PHP 11 : Introduction à array_key_exists, in_array

Une brève discussion du code source PHP 11 : Introduction à array_key_exists, in_array

不言
不言original
2018-06-28 17:06:412047parcourir

Cet article présente principalement une brève discussion sur le code source PHP 11 : l'introduction de array_key_exists et in_array 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

Un bref. discussion Code source PHP 11 : Introduction à array_key_exists, in_array

array_key_exists
(PHP 4 >= 4.1.0, PHP 5)

array_key_exists — Vérifiez le nom ou l'index de clé donné. dans le tableau
Description
bool array_key_exists ( Mixed key, array search )

array_key_exists() Renvoie TRUE lorsque la clé donnée existe dans le tableau. key peut être n’importe quelle valeur pouvant être utilisée comme index de tableau. array_key_exists() fonctionne également avec des objets.

Le programme traitera trois types différents séparément,
1. String : case IS_STRING:
==> static inline int zend_symtable_exists(HashTable *ht, char *arKey, uint nKeyLength )
==>#define HANDLE_NUMERIC(key, length, func) // Traitera la valeur de la clé de type chaîne, si c'est un nombre, prendra la valeur obtenue par la valeur func, sinon passera à l'étape suivante
= => ; ZEND_API int zend_hash_exists(HashTable *ht, char *arKey, uint nKeyLength) // Détermine si cette chaîne existe dans la table de hachage où se trouve le tableau
Numéro : case IS_LONG:
==> ZEND_API int zend_hash_index_exists (HashTable *ht, ulong h) // Cette fonction prend le bucket avec la valeur d'index h S'il y a plusieurs valeurs dans cet index, elle parcourt et prend le bucket dont la valeur clé est de type numérique 3. Valeur du mot : case IS_NULL:
==>zend_hash_exists(HASH_OF(*array), "", 1) // Déterminer s'il y a une valeur nulle dans la table de hachage où se trouve le tableau
If la fonction ci-dessus existe comme ceci : RETURN_TRUE ; sinon : RETURN_FALSE;

in_array

(PHP 4, PHP 5)

in_array — Vérifiez si une valeur existe dans le tableau

Description
bool in_array (aiguille mixte, tableau haystack [, bool strict] )

Recherchez une aiguille dans une botte de foin et renvoyez VRAI si trouvé, sinon renvoyez FAUX.

Si la valeur du troisième paramètre strict est VRAI, la fonction in_array() vérifiera également si le type d'aiguille est le même que celui de la botte de foin.

Remarque : Si l'aiguille est une chaîne, la comparaison est sensible à la casse.

Remarque : Avant la version 4.2.0 de PHP, Needle n'était pas autorisé à être un tableau.

L'implémentation du programme est très simple. Il parcourt la table de hachage où se trouve le tableau et sélectionne la fonction de comparaison en fonction de strict. Si c'est vrai, utilisez is_identical_function, sinon is_equal_function La valeur par défaut de strict est. FALSE

puis utilisez cette fonction pour déterminer si Equal, si elle existe, elle renvoie directement TRUE

Mais dans le programme on voit target_hash = HASH_OF(*array);

Le code source de la macro est comme suit :

 #define HASH_OF(p) (Z_TYPE_P(p)==IS_ARRAY ? Z_ARRVAL_P(p) : ((Z_TYPE_P(p)==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties((p) TSRMLS_CC) : NULL)))
Le rôle de cette méthode C'est de déterminer si c'est un tableau, elle renvoie un tableau Sinon, elle détermine si c'est un objet. est un objet, il renvoie toutes les propriétés de l'objet. Sinon, il renvoie NULL

Cependant, il y a un jugement devant lui pour déterminer si le paramètre est un tableau. Le code suivant :

Est-ce un problème héritage de l’histoire ?
 if (Z_TYPE_PP(array) != IS_ARRAY) {
  php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong datatype for second argument");
  RETURN_FALSE;
 }
Etrange !

EOF

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 10 : À propos des array_keys, de la fonction array_values ​​​​

Une brève discussion sur Code source PHP 9 : À propos de array_unshift, Introduction à array_push


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

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