亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php中hashtable實現示例分享

2024-05-04 23:21:15
字體:
來源:轉載
供稿:網友

對php內核有一定了解的人應該都知道php的精髓就是HashTable,HashTable在php的實現中無處不在。包括php的數組、什么全局變量、局部變量的作用域等等,php的hashtable拆開來說就是四部分:

hash函數:用的是time33的散列函數,將一個字符串的key轉換成一個數字
一個C數組:用來儲存桶(buckets)的
兩個雙向的鏈表:第一個雙向鏈表是數組的每個元素(桶bucket)是一個雙向鏈表,這樣做是為了解決hash沖突;第二個雙向鏈表是數組將每一個桶(bucket)連接起來,這里要連接的也就是第一個雙向鏈表的鏈表頭,這樣做是為了遍歷整個hash表用的,鳥哥有篇blog是講php的foreach的,這里這樣設計就是給foreach用的==>《深入理解PHP之數組(遍歷順序)》
我這里不再說hashtable的struct和bucket的struct了,因為下面的推薦鏈接幾乎都講了,我不覺得我能描述和說的比他們好,每個人的水平不一樣,我就以我現在的技術水平來描述,所以我就只把我整理的一些東西記錄一下

下面是php中hash實現的兩個文件:zend_hash.c zend_hash.h。這兩個文件里面實現了一堆的api,也引申出了一堆的api,下面是實現出來的api的原型

復制代碼 代碼如下:


ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength)
ZEND_API ulong zend_get_hash_value(const char *arKey, uint nKeyLength)
ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)
 ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)
ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
ZEND_API int zend_hash_rehash(HashTable *ht)
static int zend_hash_do_resize(HashTable *ht)
ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, int flag)
ZEND_API void zend_hash_destroy(HashTable *ht)
ZEND_API void zend_hash_clean(HashTable *ht)
static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p)
ZEND_API void zend_hash_graceful_destroy(HashTable *ht)
ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht)
ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func, int num_args, …)
ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size)
ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite ZEND_FILE_LINE_DC)
static zend_bool zend_hash_replace_checker_wrapper(HashTable *target, void *source_data, Bucket *p, void *pParam, merge_checker_func_t merge_checker_func)
ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam)   
ZEND_API int zend_hash_find(const HashTable *ht, const char *arKey, uint nKeyLength, void **pData)
ZEND_API int zend_hash_quick_find(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void **pData)
ZEND_API int zend_hash_exists(const HashTable *ht, const char *arKey, uint nKeyLength)
ZEND_API int zend_hash_quick_exists(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h)
ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)
ZEND_API int zend_hash_index_exists(const HashTable *ht, ulong h)
ZEND_API int zend_hash_num_elements(const HashTable *ht)
ZEND_API int zend_hash_get_pointer(const HashTable *ht, HashPointer *ptr)
ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr)
ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)
ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos)
ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos)
ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, uint str_length, ulong num_index, int mode, HashPosition *pos)
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compar, int renumber TSRMLS_DC)
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC)
ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)
ZEND_API ulong zend_hash_next_free_element(const HashTable *ht)
void zend_hash_display_pListTail(const HashTable *ht)
void zend_hash_display(const HashTable *ht)  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合在线小说| 国产精品日韩av| 9.1国产丝袜在线观看| 久久免费成人精品视频| 欧美激情三级免费| 欧美一区二粉嫩精品国产一线天| 亚洲女同性videos| 91在线观看免费高清| 精品成人乱色一区二区| 亚洲天堂久久av| 中文字幕成人精品久久不卡| 97碰在线观看| 欧美日韩国产综合新一区| 欧美老少配视频| 8x海外华人永久免费日韩内陆视频| 成人在线国产精品| 国产精品视频大全| 午夜剧场成人观在线视频免费观看| 91视频-88av| 一区二区三区 在线观看视| 久久偷看各类女兵18女厕嘘嘘| 日韩中文综合网| 国产精品va在线播放| 黄色一区二区在线观看| 韩国国内大量揄拍精品视频| 粉嫩老牛aⅴ一区二区三区| 91大神福利视频在线| 欧美性xxxxx极品| 九九热最新视频//这里只有精品| 91网站在线免费观看| 国产中文欧美精品| 日韩成人网免费视频| 国产精品久久久久久久av电影| 97在线视频一区| 亚洲人成人99网站| 欧美色视频日本高清在线观看| 国产精品丝袜一区二区三区| 国语自产精品视频在线看| 亚洲欧美成人精品| 国产精品久久久久久久一区探花| 欧美高跟鞋交xxxxxhd| 97精品国产97久久久久久免费| 国产一区二区三区日韩欧美| 亚洲免费视频在线观看| 91精品视频在线看| 欧美激情videoshd| 国产精品伦子伦免费视频| 国产日韩在线视频| 国产精品久久久久7777婷婷| 中文在线资源观看视频网站免费不卡| 亚洲xxx视频| 91精品国产91久久久久久吃药| 国内精品久久久久久中文字幕| 91av视频导航| 亚洲综合在线做性| 性夜试看影院91社区| 亚洲国产精品专区久久| 97超级碰碰碰| 久久国产精品首页| 亚洲影院色在线观看免费| 色婷婷av一区二区三区久久| 91在线观看欧美日韩| 欧美在线中文字幕| 欧洲日本亚洲国产区| 亚洲电影免费在线观看| 欧美亚洲另类激情另类| 午夜精品一区二区三区av| 亚洲激情视频网| 成人高h视频在线| 在线视频欧美日韩| 亚洲区bt下载| 日本一区二三区好的精华液| 欧美成人全部免费| 国产97人人超碰caoprom| 九九热这里只有在线精品视| 国产精品日韩在线一区| 亚洲精品久久7777777| 91精品国产91久久久久久| 97精品国产aⅴ7777| 亚洲国产精品人人爽夜夜爽| 亚洲精品国产欧美| 清纯唯美亚洲综合| 色一情一乱一区二区| 日韩久久精品电影| 清纯唯美亚洲激情| 久久久久久久久久久久久久久久久久av| 欧美日韩国产精品一区二区三区四区| 国产美女直播视频一区| 日本成人免费在线| 91国产视频在线| 亚洲va欧美va在线观看| 亚洲精品国产精品国自产观看浪潮| 国产精品羞羞答答| 一本色道久久88精品综合| 国产精品久久久久久影视| 日韩不卡在线观看| 在线精品播放av| 日韩女优在线播放| 成人免费观看网址| www.亚洲人.com| 国产精品扒开腿做爽爽爽视频| 欧美成人性色生活仑片| 色偷偷噜噜噜亚洲男人的天堂| 最新91在线视频| 在线播放精品一区二区三区| 国产精品视频久久| 欧美美女18p| 色狠狠久久aa北条麻妃| 精品国产一区二区三区久久狼黑人| 亚洲色图色老头| 国产精品视频网址| 这里只有精品视频在线| 成人黄色免费片| 国产精品扒开腿做| 成人综合网网址| 亚洲一区二区自拍| 91欧美激情另类亚洲| 深夜精品寂寞黄网站在线观看| 日韩中文字幕在线观看| 国产精品美女久久久免费| 欧美精品在线第一页| 国产91免费观看| 在线观看精品国产视频| 欧美国产日韩视频| 欧美亚洲另类制服自拍| 国产成人精品综合久久久| 中文字幕欧美精品在线| 色综合五月天导航| 久99久在线视频| 欧美日韩不卡合集视频| 少妇av一区二区三区| 久久精品国产清自在天天线| 免费91麻豆精品国产自产在线观看| 国产精品久久久久av免费| 91久久久久久久久| 欧美在线视频a| 91黄色8090| 91中文精品字幕在线视频| 亚洲日本中文字幕免费在线不卡| 亚洲美女精品久久| 欧美亚洲在线观看| 国产在线观看一区二区三区| 国产一区二区丝袜高跟鞋图片| 97久久伊人激情网| 在线中文字幕日韩| 91精品国产自产在线老师啪| 麻豆乱码国产一区二区三区| 欧美精品video| 91在线免费视频| 欧美一级片一区| 日韩免费高清在线观看| 亚洲黄色有码视频| 91tv亚洲精品香蕉国产一区7ujn| 青草青草久热精品视频在线网站| 奇米影视亚洲狠狠色| 97在线观看免费| 国产精品www网站| 69久久夜色精品国产69乱青草| 亚洲精品国产成人| 欧美激情视频给我| 欧美三级免费观看| 在线观看日韩视频| 国产日韩欧美在线观看| 久久亚洲一区二区三区四区五区高|