php 数组 指针,php之数组指针详解
本文主要和大家分享php之?dāng)?shù)組指針詳解,首先我們會(huì)和大家分享php 數(shù)組指的針操作方法,希望能幫助到大家。
一、php 數(shù)組指針操作
利用php的內(nèi)置函數(shù):key,current,next(),prev()移動(dòng)到上一個(gè),
reset()重置,移動(dòng)到第一個(gè)元素,end()移動(dòng)到最后一個(gè)元素上
注意一旦指針位置非法,則不能做相對(duì)移動(dòng)(next,prev),可以絕對(duì)移動(dòng)(reset,end),reset,使用頻率較高!
each(),集合了 key,current,和next三者的功能!將當(dāng)前元素信息獲得后,移動(dòng)指針到下一個(gè)元素上!
元素信息數(shù)組 = each($arr).移動(dòng)指針
注意,元素信息數(shù)組,是兩種表示方案:索引和關(guān)聯(lián)。
其中:索引:0,1分別 表示 鍵和值,關(guān)聯(lián):key,value分別表示 鍵和值
二、常用的指針遍歷方法
each+while+list遍歷數(shù)組
list-each遍歷數(shù)組
升級(jí)化操作:
將獲得鍵變量和值變量的操作,簡(jiǎn)化!
利用 list結(jié)構(gòu)
利用一個(gè)索引數(shù)組,同時(shí)初始化多個(gè)變量!
each的返回值就包含了索引數(shù)組0為鍵,1為值!
利用list簡(jiǎn)化的結(jié)果:
其實(shí):只要有循環(huán)結(jié)構(gòu),指針操作就可以完成遍歷數(shù)組
三、數(shù)組的指針問(wèn)題討論
考慮復(fù)制時(shí)的指針位置問(wèn)題:
如果原數(shù)組指針已經(jīng)非法了呢?
再看:
問(wèn)題是,復(fù)制后,誰(shuí)先 執(zhí)行的current,哪個(gè)數(shù)組指針被初始化!
該現(xiàn)象的原因是:
1, 如果數(shù)組指針位置非法,復(fù)制時(shí),會(huì)將新數(shù)組指針初始化!
2, 值傳遞時(shí),PHP采用了一個(gè) COW(寫(xiě)時(shí)復(fù)制,copy on write)的優(yōu)化措施!
寫(xiě)時(shí)復(fù)制的兩個(gè)要點(diǎn):
在值傳遞時(shí),并沒(méi)有馬上為新變量開(kāi)辟值空間,而在兩個(gè)變量都未發(fā)生改變之前,還是使用的一個(gè)值空間
一旦某個(gè)變量發(fā)生改變,此時(shí)會(huì)復(fù)制值空間,讓發(fā)生改變的變量去引用新的空間!
注意,current也會(huì)發(fā)出寫(xiě)操作,導(dǎo)致空間被復(fù)制!先current誰(shuí),誰(shuí)是那個(gè)新的,指針被初始化!
foreach時(shí)
1, 遍歷的是拷貝而不是原數(shù)組!
2, 只有在原數(shù)組發(fā)生寫(xiě)操作時(shí),才會(huì)真正的拷貝。此時(shí)原數(shù)組指針停留在當(dāng)前位置,如果已經(jīng)非法,則會(huì)初始化!
相關(guān)推薦:
總結(jié)
以上是生活随笔為你收集整理的php 数组 指针,php之数组指针详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php httphelper,C#的Ht
- 下一篇: php拒绝服务,CVE-2015-780