這篇文章主要介紹了關於淺談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中文網其他相關文章!

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

這是有關用Laravel後端構建React應用程序的系列的第二個也是最後一部分。在該系列的第一部分中,我們使用Laravel為基本的產品上市應用程序創建了一個RESTFUL API。在本教程中,我們將成為開發人員

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

在本文中,我們將在Laravel Web框架中探索通知系統。 Laravel中的通知系統使您可以通過不同渠道向用戶發送通知。今天,我們將討論您如何發送通知OV

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

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

Dreamweaver CS6
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具