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

首頁 > 開發 > PHP > 正文

簡單了解PHP編程中數組的指針的使用

2024-05-04 23:40:39
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了簡單了解PHP編程中數組的指針的使用,這里著重討論了賦值時指針的指向等使用時值得注意的地方,需要的朋友可以參考下
 

要使用數組中的元素,就需要數組的定位。定位的實現需要借助數組指針來完成。PHP中有很多函數可以移動數組指針。下面將給大家介紹幾個。

將指針移動到下一個數組位置next()

next()函數返回緊接著放在當前數組指針下一個位置的數組值。其形式如下:

mixed next(array array)

以下是一個例子:

$fruits = array("apple", "banana", "orange", "pear");echo next($fruits);echo next($fruits);// banana// orange

還可以將指針前移,也可以直接移動到數組的開始和結尾位置。

將指針移動到前一個數組位置prev()

prev()函數返回位于當前指針前一個位置的數組值,如果指針本來就位于數組的第一個位置,則返回false。其形式如下:

mixed prev(array array)

prev()的用法與next()相同,例子就省略了。

將指針移到第一個數組位置reset()

reset()函數用于將數組指針設置回數組的開始位置。其形式如下:

mixed reset(array array)

如果需要在腳本中多次查看或處理一個數組,就經常使用這個函數,另外這個函數還經常在排序結束時使用。

將指針移動到最后一個數組位置end()

end()函數將指針移動到數組的最后一個位置,將返回最后一個元素。其形式如下:

mixed end(array array)

下面的例子展示了如果獲取第一個和最后一個數組值:

$fruits = array("apple", "banana", "orange", "pear");echo current($fruits);echo end($fruits);// apple// pear

對于數組作為參數在函數間傳遞時又存在這樣一個規律:我們知道,函數調用時,系統會將實參copy一份賦值給形參(引用調用除外),而對于數組,不僅僅 copy了實參的值,而且還copy了實參數組當前內部指針的位置。如果實參內部指針的位置指向了數組末尾,那么系統會將形參的內部指針重置,指向形參數 組的第一個單元;如果實參內部指針的位置不在數組末尾,即指向了有效的單元,那么系統會將形參的數組指針位置與實參的數組指針指向值相同的數組單元。

如果不做 $arr['var6'] = 6 這一步操作,6個變量($var1-$var6)都將有值,因為在each之后,數組指針已經指向了數組的末尾,那么在調用函數 func()時,系統會重置 $arrtmp的數組指針,將其指向第一個元素。但是在進行 $arr['var6'] = 6這步操作之后,一切就改變了,這一個操作讓$arr的數組指針由原來指向一個NULL變成了一個有效值(說明一下,賦值前后,數組指針指向的地址單元一 直是沒有變化的,只不過是賦值前,那個地址單元什么也沒有,而賦值之后變成了6)。這就使得$arr的數組指針指向了一個有效的單元,那么在調用函數 func()時,系統是不會重置$arrtmp的數組指針的,$arrtmp的數組指針將會跟$arr的數組指針一樣,指向他自己的最后一個單元。而 each函數又是從當前數組指針的位置開始工作的。因此each函數操作的第一個結果的返回值就是數組$arrtmp的最后一個元素了,它將數組指針再向下移動一位,while循環到此結束,因此$arrtmp['var1']-$arrtmp['var5']都沒有被遍歷到,最終導致$var1-$var6為NULL。

數組在賦值的過程中,賦值數組和被賦值數組各自數組指針的變化情況。 先給出一條結論,然后我們在用代碼來證明這個結論吧。$arrtmp=$arr;在這個賦值表達式中我把$arr叫做賦值數組,把$arrtmp叫做被賦值數組。數 組在賦值時,如果賦值數組的數組指針已經指向了數組末尾,則賦值之后賦值數組的數組指針會被重置,指向數組第一個元素;如果在賦值時,賦值數組的數組指針 沒有指向數組末尾,而是指向了任何一個有效的數組元素,那么在賦值之后賦值數組的數組指針是不會被重置的,而是保留其原來指向的元素。在賦值之后,被賦值 數組不僅有了賦值數組的值,而且賦值數組的數組指針指向了那個元素,被賦值的數組也會指向自己中值相同的那個元素。

demo1:

<?php $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); while( list($key,$value) = each($arr) ) { if($value == 4) break; } var_dump(current($arr));  $arr1 = $arr;  var_dump(current($arr)); var_dump(current($arr1));?>

demo1 的執行結果是:int(5) int(5) int(5) 。從這個結果可以看出,賦值前后$arr的數組指針位置沒有發生任何變化,$arr1不僅值跟$arr相同,而且數組指針所指向的元素值也是相同的。現在 用上述結論來解釋這個結果,在while循環中,有一個if判斷語句,目的是不讓$arr的數組指針指向數組末尾,而是保留在一個有效的位置。 在$value=4時會跳出循環,而each這個函數會將數組指針向前移動一位,這就導致了$arr的數組指針指向了第5個元素,所以在賦值之 前,current($arr)的結果是5,賦值之后,由于在賦值之前$arr的當前指針并沒有指向末尾,因此在賦值之后不會將$arr的數組指針進行重 置,而是保留了其原有的位置,因此在賦值之后使用current($arr)的結果仍然是5。賦值時$arr1不僅獲得了$arr的值,而且數組指針指向 的元素和$arr的相同,二者都是5。

<?php$arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);while( list($key,$value) = each($arr) ){  //if($value == 4) break;}var_dump(current($arr));$arr1 = $arr;var_dump(current($arr));var_dump(current($arr1));?>

demo2中我們將 if($value == 4) break; 這一句注釋掉了,目的很簡單,就是通過each將$arr的數組指針位置指向數組末尾。

demo2 的執行結果:bool(false) int(1) bool(false) 。如果數組指針對應的元素為0,"",或者不是一個有效的值時,current函數會返回false,$arr的值中沒有為0或者""的情況,因此可以斷 定是因為數組指針指向了一個無效的元素而導致current返回了一個false。換句話說就是可以確定在while循環完成之后,$arr的數組指針已 經指向了數組的末尾。所以我們看到在賦值之前current($arr)的值是false,而賦值之后current($arr)的值變成了1,說明賦值 之后$arr的數組指針被重置了,指向了數組的第一個元素。current($arr1)的值為false,說明賦值之后$arr1讓然保留了賦值之 前$arr的數組指針指向的元素。

通過demo1和demo2就可以證明上述結論了。

因此為了在遍歷數組時不受數組指針的影響,最好在使用each()函數之前或者之后調用函數reset()將數組指針重置。這樣就可以避免上述問題的發生了。另外還有一個操作數組指針的函數prev(),它的作用是將數組指針當前的位置后退一位,它也需要注意一點,就是如果數組指針已經指向數組末尾,那么使它就得不到想要的結果了。

順便說一下foreach這個函數,使用foreach函數來遍歷數組時,它會重置數組指針,將其指向數組的第一個元素。必須注意的是foreach操作的對象是對你要遍歷的數組的copy值,而不是遍歷數組本身。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情一区二区三区久久久| 国产一区香蕉久久| 欧美午夜激情小视频| 日本aⅴ大伊香蕉精品视频| 91在线精品播放| 日韩成人高清在线| 欧美日韩另类字幕中文| 国产午夜精品理论片a级探花| 精品国产一区二区三区久久狼5月| 2019中文在线观看| 欧美成人精品一区二区| 国产亚洲激情在线| 色综合久久中文字幕综合网小说| 国产精品十八以下禁看| 日韩在线免费观看视频| 国产日韩换脸av一区在线观看| 亚洲国产精久久久久久| 伊人久久精品视频| 精品成人久久av| 日韩av电影免费观看高清| 在线观看日韩欧美| 日韩欧美中文第一页| 亚洲美女精品久久| 日韩一区二区av| 日韩成人在线电影网| 欧美黄色片免费观看| 亚洲最新av在线网站| www.日韩不卡电影av| 97色在线观看免费视频| 欧美激情第一页xxx| 欧美激情国内偷拍| 久久影视电视剧免费网站| 久久久国产一区二区| 国产伊人精品在线| 亚洲精品自在久久| 亚洲国产精品热久久| 欧美日韩久久久久| 久久久久久网站| 国产视频在线一区二区| 成人深夜直播免费观看| 亚洲欧洲一区二区三区久久| 啪一啪鲁一鲁2019在线视频| 久青草国产97香蕉在线视频| 亚洲综合在线中文字幕| 国产精品老牛影院在线观看| 欧美午夜片欧美片在线观看| 欧美与黑人午夜性猛交久久久| 国产精品∨欧美精品v日韩精品| 久久久久国产一区二区三区| 姬川优奈aav一区二区| 亚洲欧美精品一区| 在线观看国产欧美| 成人网在线免费观看| 中文字幕精品—区二区| 国产精品偷伦免费视频观看的| 原创国产精品91| 成人av色在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 久久久久久久久久久免费| 国产精品一区二区久久国产| 国产一区私人高清影院| 成人免费视频xnxx.com| 欧美尤物巨大精品爽| 久久久久久国产精品久久| 国产精品大片wwwwww| 日韩欧美国产中文字幕| 欧美亚洲在线播放| 国产福利成人在线| 亚洲欧美国产va在线影院| 亚洲性生活视频| 欧美一区二区.| 日本sm极度另类视频| 少妇久久久久久| 国产一区二区三区丝袜| 日韩视频精品在线| 久久69精品久久久久久久电影好| 国产精品旅馆在线| 欧美午夜性色大片在线观看| 国产一区二区三区精品久久久| 久久影视电视剧凤归四时歌| 国产激情久久久久| 色老头一区二区三区| 日韩欧美一区二区三区久久| 日韩精品在线免费播放| 国产在线视频2019最新视频| 亚洲一区av在线播放| 精品中文字幕在线观看| 中文字幕日韩精品在线观看| 色狠狠久久aa北条麻妃| 欧美极品少妇xxxxⅹ免费视频| 国外日韩电影在线观看| 亚洲国产精品专区久久| 51色欧美片视频在线观看| 国产精品入口尤物| 亚洲欧美国产另类| 国产亚洲在线播放| 久久精品国产一区| 一区二区三区黄色| 国产精品一区二区三区在线播放| 久久精品国产一区二区三区| 欧美激情久久久| 欧美成人小视频| 国产精品丝袜久久久久久不卡| 国产精品网红直播| 欧美色视频日本版| 中文字幕国产亚洲2019| 欧美亚洲成人网| 欧美成人免费大片| 亚洲精选中文字幕| 91精品国产高清久久久久久91| 亚洲国产天堂久久综合| 欧美在线一级视频| 欧美黑人xxxx| 91天堂在线视频| 欧美日产国产成人免费图片| 欧美第一淫aaasss性| 原创国产精品91| 热久久免费国产视频| 欧美视频一区二区三区…| 欧美日韩福利电影| 欧美综合在线观看| 色综合久久悠悠| 91天堂在线观看| 亚洲视屏在线播放| 777午夜精品福利在线观看| 欧美综合激情网| 国产精品直播网红| 久久久久久免费精品| 国产小视频国产精品| 久久久精品视频在线观看| 一区二区三区日韩在线| 亚洲免费视频一区二区| 国产成人欧美在线观看| 久久精品这里热有精品| 国产精品一区二区三区毛片淫片| 国产精品ⅴa在线观看h| 精品视频在线播放色网色视频| 日韩暖暖在线视频| 欧美激情精品久久久久久免费印度| 久久久久国产精品一区| 国产欧亚日韩视频| 亚洲高清av在线| 国产91对白在线播放| 精品久久久久久久大神国产| 亚洲国产美女精品久久久久∴| 国产免费亚洲高清| 亚洲国产成人精品女人久久久| 日韩一区二区三区在线播放| 成人在线视频福利| 97色在线观看免费视频| 久久伊人精品天天| 一本色道久久88综合亚洲精品ⅰ| 日韩亚洲成人av在线| 精品一区二区亚洲| 亚洲精品第一国产综合精品| 国产精品久久久久久久久久新婚| 国产精品美女www爽爽爽视频| 国产一区二区色| 91高潮精品免费porn| 亚洲人成在线电影| 亚洲福利在线看| 性欧美xxxx视频在线观看| 欧美激情成人在线视频| 日韩欧美成人精品|