新年的第一篇文章,首先給各位朋友拜年
今天有空看了下代碼,寫點(diǎn)東西,留作紀(jì)念!
array array_keys ( array input [, mixed search_value [, bool strict]] )
array_keys() 返回 input 數(shù)組中的數(shù)字或者字符串的鍵名。
如果指定了可選參數(shù) search_value,則只返回該值的鍵名。否則 input 數(shù)組中的所有鍵名都會被返回。自 PHP 5 起,可以用 strict 參數(shù)來進(jìn)行全等比較(===)。
array_keys 函數(shù)的實(shí)現(xiàn)在standard/array.c文件的2416行 PHP_FUNCTION(array_keys)
程序依照PHP一貫的風(fēng)格,先判斷輸入是否正確,如果有第三個(gè)參數(shù),則判斷大小的函數(shù)使用is_identical_function(默認(rèn)情況下是使用 is_equal_function函數(shù))
然后初始化返回的數(shù)組,遍歷所給的數(shù)組,取每個(gè)元素的key值,賦值給返回的數(shù)組,這個(gè)key值又分為數(shù)字和字符串兩種,其中最主要的函數(shù)是hash操作函數(shù)zend_hash_get_current_key_ex(取當(dāng)前元素的key值)
ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos){ Bucket *p; p = pos ? (*pos) : ht- pInternalPointer; IS_CONSISTENT(ht); if (p) { if (p- nKeyLength) { // 數(shù)字型的nKeyLength長度為0 if (duplicate) { *str_index = estrndup(p- arKey, p- nKeyLength - 1); } else { *str_index = p- arKey; // /* arKey存儲key名稱(字符串類型的key)必須是最后一個(gè)成員,*/ if (str_length) { *str_length = p- nKeyLength; return HASH_KEY_IS_STRING; } else { *num_index = p- // 存儲數(shù)字key值 return HASH_KEY_IS_LONG; return HASH_KEY_NON_EXISTANT;}對于此函數(shù)的理解主要是對bucket定義的了解
與bucket相關(guān)的內(nèi)容請移步http://www.49028c.com/php-weizijiaocheng-405316.html
array array_values ( array input )
array_values() 返回 input 數(shù)組中所有的值并給其建立數(shù)字索引。
array_values 函數(shù)與array_keys的函數(shù)實(shí)現(xiàn)基本類似,并且還少了一個(gè)zend_hash_get_current_key_ex操作和判斷值類型的操作,
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !
相關(guān)推薦:
淺談PHP源碼九:關(guān)于array_unshift, array_push的介紹
淺談PHP源碼八:關(guān)于array_pop, array_shift的介紹
淺談PHP源碼七:關(guān)于nl2br, ltrim, rtrim, trim函數(shù)
以上就是淺談PHP源碼十:關(guān)于array_keys,array_values函數(shù)的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選