久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

本篇文章給大家?guī)?lái)了關(guān)于PHP的相關(guān)知識(shí),其中主要跟大家介紹數(shù)組是怎么靈活支持多數(shù)據(jù)類型的,感興趣的朋友下面一起來(lái)看一下吧,希望對(duì)大家有幫助。

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

在PHP中,數(shù)組數(shù)據(jù)結(jié)構(gòu)的應(yīng)用處理是使用頻率非常高的,相對(duì)于Java、C++ 這種強(qiáng)類型語(yǔ)言來(lái)說(shuō),PHP的數(shù)組簡(jiǎn)直可以說(shuō)是太好用了,可以存儲(chǔ)各種類型的數(shù)據(jù)(如:數(shù)字、字符串甚至對(duì)象等),為開(kāi)發(fā)帶來(lái)了極大的便利。

基于 PHP 數(shù)組的強(qiáng)大特性,我們可以輕易實(shí)現(xiàn)更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如棧、隊(duì)列、列表、集合、字典等。

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

你是否迫不及待的想要一探究竟:PHP到底是如何實(shí)現(xiàn)數(shù)組的呢?

1、PHP數(shù)組底層數(shù)據(jù)結(jié)構(gòu)

PHP 數(shù)組其內(nèi)部是使用 HashTable 結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,那就先來(lái)簡(jiǎn)單說(shuō)說(shuō)HashTable吧!

HashTable又稱散列表,是通過(guò)key-value的方式來(lái)高效地訪問(wèn)數(shù)據(jù)的一種結(jié)構(gòu)。哈希表是數(shù)組和鏈表的一種合并,集成了數(shù)組的尋址快,鏈表的插入快的特點(diǎn)于一身。

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

HashTable主要分為兩個(gè)環(huán)節(jié):

1. 哈希函數(shù):哈希函數(shù)將要查找的值轉(zhuǎn)換成數(shù)字索引,通過(guò)數(shù)字索引可以快速的找到值存在的位置。

2. 哈希碰撞:理想情況下,不同的值通過(guò)哈希函數(shù)后,出來(lái)的結(jié)果是不一樣的;如果不一樣的值,哈希后出來(lái)一樣的數(shù)字,我們稱之為哈希碰撞。

因此應(yīng)用 HashTable 就必須要面臨解決哈希碰撞的問(wèn)題,主要的解法有兩種:鏈表法,開(kāi)放尋址法。

在zend_type.h文件中,可以找到 HashTable 的主要結(jié)構(gòu)定義如下:

zend_數(shù)組 類型

挑選幾個(gè)重點(diǎn)成員介紹一下:

  • gc: 引用計(jì)數(shù),垃圾回收使用。

  • arData:散列表中保存存儲(chǔ)元素的數(shù)組,其內(nèi)存是連續(xù)的,arData指向數(shù)組的起始位置;

  • nTableSize:數(shù)組的總?cè)萘?,即可以容納的元素?cái)?shù),arData 的內(nèi)存大小就是根據(jù)這個(gè)值確定的,它的大小的是2的冪次方,最小為8,然后按照 8、16、32…依次遞增;

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

Bucket 類型

Bucket 的結(jié)構(gòu)比較簡(jiǎn)單,主要用來(lái)保存元素的 key 和 value,以及一個(gè)整型的 h(散列值,或者叫哈希值)。

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

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

h 的值用來(lái)最終映射元素的存儲(chǔ)位置。

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

2、PHP 數(shù)組的基本實(shí)現(xiàn)

上面部分我們了解了 zend_數(shù)組 的數(shù)據(jù)結(jié)構(gòu),那接著看看數(shù)組的初始化吧:

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

數(shù)組的初始化主要是針對(duì) HashTable 成員的設(shè)置,初始化時(shí)并不會(huì)立即分配 arData 的內(nèi)存,插入第一個(gè)元素之后才會(huì)分配 arData 的內(nèi)存。

為了更好的理解整個(gè)hash結(jié)構(gòu),我們來(lái)舉個(gè)例子說(shuō)明一下這個(gè)結(jié)構(gòu):

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

那上面的hash結(jié)構(gòu)應(yīng)該是什么樣的呢?arData存儲(chǔ)的結(jié)果應(yīng)該是什么樣呢?

畫(huà)個(gè)圖例來(lái)看看吧,更直觀一些:

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

arData是Bucket類型的指針,用來(lái)具體存儲(chǔ)每個(gè)元素的key,value,按照插入元素的順序存儲(chǔ)數(shù)據(jù)的,所以數(shù)組的順序也是靠這個(gè)來(lái)保證。

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

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

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

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

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

….

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

3、PHP 數(shù)組的有序性

數(shù)組中各元素的順序和插入順序一致,這個(gè)是怎么實(shí)現(xiàn)的呢?

為了實(shí)現(xiàn) PHP 數(shù)組的有序性,PHP 底層的散列表在散列函數(shù)與元素?cái)?shù)組之間加了一層映射表,這個(gè)映射表也是一個(gè)數(shù)組,大小和存儲(chǔ)元素的數(shù)組相同,存儲(chǔ)元素的類型為整型,用于保存元素在實(shí)際存儲(chǔ)的有序數(shù)組中的下標(biāo) —— 元素按照先后順序依次插入實(shí)際存儲(chǔ)數(shù)組,然后將其數(shù)組下標(biāo)按照散列函數(shù)散列出來(lái)的位置存儲(chǔ)在新加的映射表中:

深析PHP數(shù)組是怎么靈活支持多數(shù)據(jù)類型

這樣,就可以完成最終存儲(chǔ)數(shù)據(jù)的有序性了。

PHP 數(shù)組底層結(jié)構(gòu)中并沒(méi)有顯式標(biāo)識(shí)這個(gè)中間映射表,而是與 arData 放到了一起,在數(shù)組初始化的時(shí)候并不僅僅分配用于存儲(chǔ) Bucket 的內(nèi)存,還會(huì)分配相同數(shù)量的 uint32_t 大小的空間,這兩塊空間是一起分配的,然后將 arData 偏移到存儲(chǔ)元素?cái)?shù)組的位置,而這個(gè)中間映射表就可以通過(guò) arData 向前訪問(wèn)到。

總結(jié)

PHP中的數(shù)組其特點(diǎn)就是將 values 映射到 keys 的類型。與其他語(yǔ)言不同的是,PHP中數(shù)組的 key 可以是字符串,而values可以是任意類型。

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

推薦學(xué)習(xí):《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产精品15p| 日韩有吗在线观看| 精品一区二区三区免费看| 国产精品一线| 久久久国产精品网站| 精品九九久久| 日韩欧美在线中字| 欧美日韩在线播放视频| 亚洲精品一二三区区别| 久久久噜噜噜| 五月天综合网站| 亚洲欧美日韩国产一区二区| 三级一区在线视频先锋| 免费成人在线影院| 中文字幕亚洲精品乱码| 日韩精品中文字幕一区二区| 日韩中文av| 国产精品成人自拍| 成人在线丰满少妇av| 中文在线免费视频| 婷婷综合亚洲| 日韩激情一二三区| 精品欠久久久中文字幕加勒比| 天堂а√在线最新版中文在线| 久久在线电影| 亚洲久久一区| 麻豆国产精品777777在线| 日韩欧美精品综合| 美女国产精品| 国产精品99久久免费观看| 日韩在线看片| 日韩在线播放一区二区| 国产日韩一区| 日韩欧美精品一区| 久久亚洲美女| 国产精品久久久久av蜜臀| 麻豆mv在线观看| 欧美在线亚洲| 欧美视频二区| av中文字幕在线观看第一页 | 久久av免费| 日韩欧美一区免费| 在线一区免费观看| 欧美亚洲综合视频| 亚洲www啪成人一区二区| 视频一区欧美精品| 精品视频91| 久久国产精品99国产| 国产精品久久久久久久久久齐齐| av高清不卡| 婷婷精品久久久久久久久久不卡| 成人在线黄色| 好看的av在线不卡观看| 国产精品亚洲产品| 今天的高清视频免费播放成人| 日韩精品欧美精品| se01亚洲视频| 婷婷精品久久久久久久久久不卡| 国产精品久久观看| 中文字幕日韩亚洲| 精品国产第一福利网站| 亚洲免费毛片| 久久亚洲国产| 91麻豆精品| 亚洲手机在线| 麻豆精品视频在线观看视频| 日韩午夜免费| 精品视频网站| 日韩欧美中文字幕电影| 久久久久美女| 国产精品中文| 在线视频精品| 最新中文字幕在线播放 | 欧美亚洲三区| 黄色免费成人| 亚洲美女久久精品| 国产乱人伦丫前精品视频| 妖精视频成人观看www| 国产精品久久久久久久久久10秀| 日韩高清电影免费| 午夜电影亚洲| 裤袜国产欧美精品一区| 国产亚洲精品精品国产亚洲综合| 狠狠爱www人成狠狠爱综合网| 国产91欧美| 久久国产乱子精品免费女| 亚洲综合精品| 99精品网站| 97精品国产| 欧美黑人巨大videos精品| 无码日韩精品一区二区免费| 九一国产精品| 不卡福利视频| 精品久久福利| 久久99影视| 日本成人中文字幕| 亚洲一区二区av| 99视频精品免费观看| 激情自拍一区| 久久久久午夜电影| 亚洲人成在线网站| 国产va免费精品观看精品视频| 国产精品一区二区三区美女 | 99久久九九| 好看的亚洲午夜视频在线| 精品中文字幕一区二区三区四区| 亚洲影院天堂中文av色| 欧美日韩中文字幕一区二区三区| 亚洲不卡av不卡一区二区| 日韩av一区二区三区四区| 手机在线电影一区| 欧美国产极品| 国产精品白丝av嫩草影院| 91欧美极品| 欧美日韩午夜| 久久国产免费看| 国产精品一区三区在线观看| 欧美日一区二区在线观看| 亚洲一区二区三区四区五区午夜| 久久国产中文字幕| 欧洲亚洲一区二区三区| 欧美aa在线观看| 成人片免费看| 日韩欧美三级| 久久视频国产| 宅男在线一区| 亚洲精品一区二区妖精| 宅男噜噜噜66国产日韩在线观看| 精品欧美激情在线观看| 欧美精选一区二区三区| 欧美成人亚洲| 在线视频日韩| 中文字幕av一区二区三区人 | 国产精品91一区二区三区| 欧美~级网站不卡| 国产精品三上| 日本va欧美va精品| 麻豆成人综合网| 国产精品精品国产一区二区| 日韩在线视频精品| 欧美日韩日本国产亚洲在线| 免费在线欧美视频| 国产麻豆精品| 麻豆mv在线观看| 午夜av一区| 最近国产精品视频| 国产精品igao视频网网址不卡日韩| 国产精品7m凸凹视频分类| 久久国产生活片100| 国产精品第一国产精品| 国内精品伊人| 在线精品视频在线观看高清| 欧美视频精品全部免费观看| www.51av欧美视频| 欧美日韩亚洲一区二区三区在线| 日韩在线中文| 美女高潮久久久| 九九精品调教| 青青青国产精品| 国产一区二区三区四区| 久久国产欧美| 视频一区二区中文字幕| 中文字幕一区二区三区四区久久| 人人爱人人干婷婷丁香亚洲| 成人国产精品久久| 欧美日韩日本国产亚洲在线| 日韩激情啪啪| 日韩精品dvd| 亚洲视频播放| 久久精品99久久久| 综合日韩av| 蜜桃免费网站一区二区三区| 国产精品永久| 久久一区二区三区电影| 日产欧产美韩系列久久99| 久久爱www.| 午夜日韩在线| 国产日韩一区二区三区在线| 久久精品99久久无色码中文字幕| 亚洲人成亚洲精品| 国产精品日韩精品在线播放 | 欧美国产极品| 亚洲调教视频在线观看| 日韩av午夜在线观看| 日韩免费一区| 日韩激情视频网站| 91精品亚洲| 欧美中文高清| 91精品一区国产高清在线gif | 成人羞羞视频播放网站| 亚洲伊人精品酒店| 97精品97| 欧美性www| 在线亚洲激情| 国产传媒在线| 欧美日韩中文| 亚洲免费专区| 久久国产乱子精品免费女| 欧美国产专区| 少妇精品久久久一区二区|