gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

深析PHP數組是怎么靈活支持多數據類型

本篇文章給大家帶來了關于PHP的相關知識,其中主要跟大家介紹數組是怎么靈活支持多數據類型的,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。

深析PHP數組是怎么靈活支持多數據類型

在PHP中,數組數據結構的應用處理是使用頻率非常高的,相對于Java、C++ 這種強類型語言來說,PHP的數組簡直可以說是太好用了,可以存儲各種類型的數據(如:數字、字符串甚至對象等),為開發帶來了極大的便利。

基于 PHP 數組的強大特性,我們可以輕易實現更加復雜的數據結構,比如棧、隊列、列表、集合、字典等。

深析PHP數組是怎么靈活支持多數據類型

你是否迫不及待的想要一探究竟:PHP到底是如何實現數組的呢?

1、PHP數組底層數據結構

PHP 數組其內部是使用 HashTable 結構來實現的,那就先來簡單說說HashTable吧!

HashTable又稱散列表,是通過key-value的方式來高效地訪問數據的一種結構。哈希表是數組和鏈表的一種合并,集成了數組的尋址快,鏈表的插入快的特點于一身。

深析PHP數組是怎么靈活支持多數據類型

HashTable主要分為兩個環節:

1. 哈希函數:哈希函數將要查找的值轉換成數字索引,通過數字索引可以快速的找到值存在的位置。

2. 哈希碰撞:理想情況下,不同的值通過哈希函數后,出來的結果是不一樣的;如果不一樣的值,哈希后出來一樣的數字,我們稱之為哈希碰撞。

因此應用 HashTable 就必須要面臨解決哈希碰撞的問題,主要的解法有兩種:鏈表法,開放尋址法。

在zend_type.h文件中,可以找到 HashTable 的主要結構定義如下:

zend_數組 類型

挑選幾個重點成員介紹一下:

  • gc: 引用計數,垃圾回收使用。

  • arData:散列表中保存存儲元素的數組,其內存是連續的,arData指向數組的起始位置;

  • nTableSize:數組的總容量,即可以容納的元素數,arData 的內存大小就是根據這個值確定的,它的大小的是2的冪次方,最小為8,然后按照 8、16、32…依次遞增;

深析PHP數組是怎么靈活支持多數據類型

Bucket 類型

Bucket 的結構比較簡單,主要用來保存元素的 key 和 value,以及一個整型的 h(散列值,或者叫哈希值)。

  • 如果元素是數值索引,則其值就是數值索引的值;

  • 如果是字符串索引,那么其值就是 key 通過 Time33 算法計算得到的散列值。

h 的值用來最終映射元素的存儲位置。

深析PHP數組是怎么靈活支持多數據類型

2、PHP 數組的基本實現

上面部分我們了解了 zend_數組 的數據結構,那接著看看數組的初始化吧:

深析PHP數組是怎么靈活支持多數據類型

數組的初始化主要是針對 HashTable 成員的設置,初始化時并不會立即分配 arData 的內存,插入第一個元素之后才會分配 arData 的內存。

為了更好的理解整個hash結構,我們來舉個例子說明一下這個結構:

$data = array(     'hello' => 'haha',     1       => 'me to'     'world' => 'world',      2       => 2 ); unset($data[1]);
登錄后復制

那上面的hash結構應該是什么樣的呢?arData存儲的結果應該是什么樣呢?

畫個圖例來看看吧,更直觀一些:

深析PHP數組是怎么靈活支持多數據類型

arData是Bucket類型的指針,用來具體存儲每個元素的key,value,按照插入元素的順序存儲數據的,所以數組的順序也是靠這個來保證。

每個arData數組的元素,從圖中可以看到,左邊負數是哈希值取模后的值,存儲的是右邊arData的索引;如-8沖突了,則存儲了鏈表的頭元素。

arData[0]: key='hello',h=xx(具體某個值),val = 'haha'

arData[1]: val是 type=IS_UNDEF 的zval(被unset后,不是立即被刪除,而是置成IS_UNDEF)

arData[2]: key='world',h=xx(具體某個值),val = 'world'

arData[3]: key=NULL,h=2(可能會哈希值沖突),val = 2

….

上面的例子很具體地解釋了nNumUsed,nNumOfElements,arData的意義。

3、PHP 數組的有序性

數組中各元素的順序和插入順序一致,這個是怎么實現的呢?

為了實現 PHP 數組的有序性,PHP 底層的散列表在散列函數與元素數組之間加了一層映射表,這個映射表也是一個數組,大小和存儲元素的數組相同,存儲元素的類型為整型,用于保存元素在實際存儲的有序數組中的下標 —— 元素按照先后順序依次插入實際存儲數組,然后將其數組下標按照散列函數散列出來的位置存儲在新加的映射表中:

深析PHP數組是怎么靈活支持多數據類型

這樣,就可以完成最終存儲數據的有序性了。

PHP 數組底層結構中并沒有顯式標識這個中間映射表,而是與 arData 放到了一起,在數組初始化的時候并不僅僅分配用于存儲 Bucket 的內存,還會分配相同數量的 uint32_t 大小的空間,這兩塊空間是一起分配的,然后將 arData 偏移到存儲元素數組的位置,而這個中間映射表就可以通過 arData 向前訪問到。

總結

PHP中的數組其特點就是將 values 映射到 keys 的類型。與其他語言不同的是,PHP中數組的 key 可以是字符串,而values可以是任意類型。

除常規增刪改查之外,數組還有很多其他操作,比如復制、合并、銷毀、重置等,這些操作對應的代碼都位于 zend_hash.c 中,感興趣的同學可以去了解一下。

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
欧美大片免费播放| 精品少妇一区二区三区在线| 国产性生活免费视频| 中文字幕免费高| 久国产精品视频| 日本免费成人网| 2018国产在线| 波多野结衣作品集| 男女h黄动漫啪啪无遮挡软件| 欧美亚洲另类色图| 黄色三级视频片| 91插插插插插插插插| 欧美极品欧美精品欧美| 中文字幕第36页| 免费视频爱爱太爽了| 91亚洲精品久久久蜜桃借种| 日本手机在线视频| 中文字幕第38页| 午夜精品久久久内射近拍高清| 亚洲成人手机在线观看| 天堂视频免费看| 四季av一区二区三区| 天天干天天操天天玩| 91黄色在线看| 亚洲欧美日韩一二三区| 91麻豆天美传媒在线| 国产精品va无码一区二区| 一区二区三区 日韩| 无遮挡又爽又刺激的视频| 午夜一区二区视频| 极品美女扒开粉嫩小泬| 女女百合国产免费网站| 午夜dv内射一区二区| 一本岛在线视频| 丰满的少妇愉情hd高清果冻传媒| 国产乱子夫妻xx黑人xyx真爽| 午夜国产一区二区三区| 能看的毛片网站| 婷婷丁香激情网| 妞干网在线视频观看| 僵尸世界大战2 在线播放| av 日韩 人妻 黑人 综合 无码| 黄色特一级视频| av黄色在线网站| 成人精品视频在线播放| 尤蜜粉嫩av国产一区二区三区| 91av视频免费观看| av无码精品一区二区三区| 无码人妻h动漫| 国产伦精品一区二区三区四区视频_ | 992tv快乐视频| 在线一区二区不卡| 热久久精品免费视频| 黄色免费高清视频| 男人日女人bb视频| 免费看污黄网站| 天天操夜夜操很很操| 九九久久久久久| 日日干日日操日日射| 97国产精东麻豆人妻电影| av免费网站观看| 妞干网在线观看视频| 黄色成人在线看| 青青在线免费观看| 另类小说第一页| 狠狠97人人婷婷五月| 国产91对白刺激露脸在线观看| 三区视频在线观看| 3d动漫一区二区三区| 欧美日韩一道本| 日韩a在线播放| 免费成人进口网站| www在线观看免费| 青青草原国产在线视频| 国产欧美精品aaaaaa片| 3d动漫一区二区三区| 欧美一区二区中文字幕| bt天堂新版中文在线地址| caopor在线视频| 日本成人黄色网| 亚洲激情免费视频| 欧美视频在线观看视频| 日本男人操女人| 欧美成人精品欧美一级乱| 蜜臀av午夜一区二区三区| 在线观看免费av网址| 激情 小说 亚洲 图片: 伦| 国产一区 在线播放| 国产精品69页| 超碰人人草人人| 日韩中文字幕组| 日本一本二本在线观看| 午夜xxxxx| 99国产精品久久久久久| 波多结衣在线观看| 91欧美视频在线| 欧美精品 - 色网| 久久这里只有精品8| 国产精品丝袜久久久久久消防器材| 免费黄频在线观看| 国产av熟女一区二区三区| 国产精品av免费| 精品少妇人妻av一区二区| 午夜在线观看av| 99久久国产综合精品五月天喷水| 三上悠亚久久精品| 亚洲色图久久久| 色悠悠久久综合网| 日韩av卡一卡二| 久久亚洲国产成人精品无码区| 中文字幕资源在线观看| 国产日韩一区二区在线| 已婚少妇美妙人妻系列| 免费看国产曰批40分钟| 69堂免费视频| a级黄色一级片| 大桥未久一区二区| 久久久精品在线视频| 9l视频自拍9l视频自拍| 国产精品无码一本二本三本色| 日本欧美视频在线观看| 日韩视频在线免费播放| 自慰无码一区二区三区| 午夜激情视频网| 女同激情久久av久久| 欧美成人免费在线观看视频| 桥本有菜av在线| 青青草视频国产| www.日日操| 国产系列第一页| 一二三级黄色片| 999在线观看| 日韩在线一级片| 国内外成人激情视频| 日本成年人网址| 久久久999免费视频| 国产一区视频免费观看| 国产精品12345| 国产真人做爰毛片视频直播 | 精品综合久久久久| caopor在线视频| 异国色恋浪漫潭| 青青在线视频免费观看| 在线观看高清免费视频| www.黄色网址.com| 黄色成人在线免费观看| 免费男同深夜夜行网站| 免费av网址在线| 国产黄视频在线| 午夜免费视频网站| 国产偷人视频免费| 青青草免费在线视频观看| 国产欧美日韩网站| www.av91| 粉嫩av一区二区三区天美传媒| 男女超爽视频免费播放| 国产精品又粗又长| 潘金莲一级淫片aaaaaa播放1| 中文字幕第一页亚洲| 色婷婷.com| 九九九久久久久久久| 亚洲人成无码www久久久| 中国丰满人妻videoshd| 东北少妇不带套对白| 亚洲综合激情视频| www.男人天堂网| 午夜激情影院在线观看| 能在线观看的av网站| 波多野结衣综合网| 在线观看三级网站| 成人在线免费观看av| 奇米精品一区二区三区| 国内精品国产三级国产99| 中文 日韩 欧美| 黄色a级三级三级三级| jizzjizz国产精品喷水| 国产成人一区二区三区别| 国产传媒免费观看| 欧美成人三级在线播放| 国产成人av影视| 97超碰人人看| 国产麻豆电影在线观看| 成年人在线看片| 国产美女三级视频| 农村妇女精品一二区| 97中文字幕在线| 超碰在线公开97| www.国产在线播放| 日本爱爱免费视频| 亚洲高清在线免费观看| 嫩草影院国产精品| 国产午夜精品视频一区二区三区| 特级黄色录像片| www国产无套内射com| 一级黄色录像免费看| 免费观看黄色的网站| 欧美日韩视频免费在线观看| 狠狠爱免费视频| 999香蕉视频| 久久综合久久久久|