這篇文章主要介紹了關於淺談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的介紹
以上是淺談PHP原始碼十一:關於 array_key_exists,in_array的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器