这篇文章主要介绍了关于浅谈PHP源码十一:关于 array_key_exists,in_array的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
浅谈PHP源码十一:关于 array_key_exists,in_array的介绍
array_key_exists
(PHP 4 >= 4.1.0, PHP 5)
array_key_exists — 检查给定的键名或索引是否存在于数组中
说明
bool array_key_exists ( mixed key, array search )
array_key_exists() 在给定的 key 存在于数组中时返回 TRUE。key 可以是任何能作为数组索引的值。array_key_exists() 也可用于对象。
程序会针对三种不同的类型分别处理,
1、字符串: case IS_STRING:
==> static inline int zend_symtable_exists(HashTable *ht, char *arKey, uint nKeyLength)
==>#define HANDLE_NUMERIC(key, length, func) // 将处理字符串类型的key值,如果是数字则取func值所得的值,否则转下一步
==> ZEND_API int zend_hash_exists(HashTable *ht, char *arKey, uint nKeyLength) // 判断在数组所在的hashtable中是否存在此字符串
2、数字:case IS_LONG:
==>ZEND_API int zend_hash_index_exists(HashTable *ht, ulong h) // 此函数取索引值为h的bucket,如果此索引存在多个值,则遍历取key值为数字型的bucket
3、字值:case IS_NULL:
==>zend_hash_exists(HASH_OF(*array), “”, 1) // 判断数组所在hashtable中是否存在空值
以上的函数如此存在则:RETURN_TRUE;否则:RETURN_FALSE;
in_array
(PHP 4, PHP 5)
in_array — 检查数组中是否存在某个值
说明
bool in_array ( mixed needle, array haystack [, bool strict] )
在 haystack 中搜索 needle,如果找到则返回 TRUE,否则返回 FALSE。
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。
注意: 如果 needle 是字符串,则比较是区分大小写的。
注意: 在 PHP 版本 4.2.0 之前,needle 不允许是一个数组。
程序实现非常简单,遍历数组所在的hash table,依据strict选择比较函数,如果为真则使用is_identical_function,否则为is_equal_function,strict的默认值为FALSE
然后使用此函数判断是否相等,如果存在则直接返回TRUE
但是在程序中我们有看到 target_hash = HASH_OF(*array);
宏源码如下:
#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)))
此方法的作用是判断是否是数组,如果是数组返回数组,否则判断是否是对象,如果为对象,则返回对象的所有属性,否则返回NULL
但是在前面又有判断参数是否为数组的判断,如下代码:
if (Z_TYPE_PP(array) != IS_ARRAY) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong datatype for second argument"); RETURN_FALSE; }
难道是历史遗留问题?
奇怪!
EOF
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
浅谈PHP源码十:关于array_keys,array_values函数
浅谈PHP源码九:关于array_unshift, array_push的介绍
浅谈PHP源码八:关于array_pop, array_shift的介绍
Atas ialah kandungan terperinci 浅谈PHP源码十一:关于 array_key_exists,in_array的介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Tomakephpapplicationsfaster, ikutiTheseSteps: 1) UseopcodecachinglikeopcachetostorePrecompiledscriptbytecode.2) minimizedatabasequeriesbyusingquerycachingandeficientindexing.3)

ToimprovePhpapPlicationspeed, ikutiTheSesteps: 1) EnableopCodeCachingWithApcutoreduceScriptExecutionTime.2) pelaksanaanDatabasequerycachingingPdotominimizedataBaseHits.3)

Suntikan ketergantungan (DI) dengan ketara meningkatkan kesesuaian kod PHP oleh kebergantungan transitif secara eksplisit. 1) Kelas Decoupling dan pelaksanaan khusus menjadikan ujian dan penyelenggaraan lebih fleksibel. 2) Di antara tiga jenis, pembina menyuntik kebergantungan ekspresi eksplisit untuk memastikan keadaan konsisten. 3) Gunakan bekas DI untuk menguruskan kebergantungan kompleks untuk meningkatkan kualiti kod dan kecekapan pembangunan.

DatabaseQueryoptimizationInpinvolvesseverSlegatiesToenhancePratePratePratePratePratePregiesToRperformance.1) selectOnlynessaryColumnStoReducedatatatransfer.2) UseIndexingTospeedupdatareTrieval.3) PrevancequerycachingToStoreresultSoffReFfeFfffffffffffffffffffffffffffffffffffffffffffferseprewfffffffffffersepresseprespersepresperseprespersepresperseprespersepresperseprespers

Phpisusedforsendingemailsduetoitsbuilt-inmail () functionAndSupportivelibrariesLikePhpmailerandswiftmailer.1) usethemail () functionforbasiceMails, butithaslimitations.2) scorkphpmailerforadvancedfeatures

Kesesakan prestasi PHP boleh diselesaikan melalui langkah -langkah berikut: 1) Gunakan XDEBUG atau Blackfire untuk analisis prestasi untuk mengetahui masalah; 2) Mengoptimumkan pertanyaan pangkalan data dan menggunakan cache, seperti APCU; 3) Gunakan fungsi yang cekap seperti array_filter untuk mengoptimumkan operasi array; 4) Konfigurasi Opcache untuk cache bytecode; 5) mengoptimumkan bahagian depan, seperti mengurangkan permintaan HTTP dan mengoptimumkan gambar; 6) Memantau dan mengoptimumkan prestasi secara berterusan. Melalui kaedah ini, prestasi aplikasi PHP dapat ditingkatkan dengan ketara.

DependencyInjection (DI) inphpisadesignPatternThatManagesandReducesclassdependencies, enhancingcodemodularity, testility, andmaintainability.itallowspassingdependenciesLikedatabaseconnectionstoclassesesparameters, fasilitasieAseAsiShanandscalability.

CachingimprovesphpperformanceSbebyStoringResultsofcomputationsorqueriesforquickretrieval, reducingserverloadandenhancingResponsetimes.effectiveStRegiesClude: 1) Opcodecaching, yang


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Dreamweaver CS6
Alat pembangunan web visual

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini
