摘要:和只從數(shù)組的頭或尾刪除一個(gè)元素。因此解讀時(shí)將這兩個(gè)函數(shù)一并講了。函數(shù)語(yǔ)法函數(shù)彈出并返回?cái)?shù)組的最后一個(gè)單元,并將數(shù)組長(zhǎng)度減一。將數(shù)組開(kāi)頭的單元移出數(shù)組并作為結(jié)果返回,將長(zhǎng)度減一并將所有數(shù)字鍵值改為從開(kāi)始計(jì)數(shù),文字鍵值不變。
上篇文章介紹了PHP添加元素到數(shù)組的函數(shù),那么當(dāng)然有從數(shù)組中刪除元素。array_pop和array_shift只從數(shù)組的頭或尾刪除一個(gè)元素。經(jīng)過(guò)閱讀源碼,發(fā)現(xiàn)這兩個(gè)函數(shù)的實(shí)現(xiàn)都是調(diào)用了同一個(gè)函數(shù)--_phpi_pop來(lái)實(shí)現(xiàn)從數(shù)組中刪除一個(gè)數(shù)組元素的功能。因此解讀時(shí)將這兩個(gè)函數(shù)一并講了。
我在github有對(duì)PHP源碼更詳細(xì)的注解。感興趣的可以圍觀一下,給個(gè)star。PHP5.4源碼注解??梢酝ㄟ^(guò)commit記錄查看已添加的注解。
函數(shù)語(yǔ)法 array_popmixed array_pop ( array $&array )
array_pop函數(shù)彈出并返回?cái)?shù)組的最后一個(gè)單元,并將數(shù)組長(zhǎng)度減一。如果array為空則返回NULL。
array_shiftmixed array_shift ( array &$array )
將數(shù)組開(kāi)頭的單元移出數(shù)組并作為結(jié)果返回,將array長(zhǎng)度減一并將所有數(shù)字鍵值改為從0開(kāi)始計(jì)數(shù),文字鍵值不變。
代碼示例下面代碼展示了array_pop和array_shift的使用方法
$arr = array(‘a(chǎn)pple’, ‘banana’, ‘cat’); $val = array_pop($arr); // val == cat $arr = array(‘a(chǎn)pple’, ‘banana’, ‘cat’); $val = array_shift($arr); // val == apple執(zhí)行步驟
兩個(gè)函數(shù)都是調(diào)用了_phpi_pop函數(shù),區(qū)別不同的是調(diào)用_phpi_pop函數(shù)時(shí)傳遞的第二個(gè)參數(shù)off_the_end的不同,如果off_the_end是1,則是array_pop,否則是array_shift。下面是_phpi_pop這個(gè)函數(shù)執(zhí)行的詳細(xì)步驟:
1、如果數(shù)組長(zhǎng)度為0,則返回NULL。
2、根據(jù)off_the_end參數(shù)移動(dòng)內(nèi)部指針指向需要?jiǎng)h除的數(shù)組元素。
3、設(shè)置返回值為第二步指針指向的元素。
4、從數(shù)組中移出第一個(gè)或最后一個(gè)值并將長(zhǎng)度減一。
5、如果是array_shift操作,則需要重置數(shù)組下標(biāo),將數(shù)字下標(biāo)改為從0開(kāi)始計(jì)數(shù),文字鍵值不變;否則只需要修改下一個(gè)數(shù)字索引的位置。
6、重置array指針。
函數(shù)執(zhí)行的過(guò)程可以用下面的流程圖描述:
下面兩個(gè)圖展示了根據(jù)上面的示例代碼執(zhí)行時(shí)數(shù)組元素和內(nèi)部指針的變化的效果圖:
array_pop
array_shift
array_pop和array_shift調(diào)用此函數(shù)執(zhí)行的步驟都大同小異,不同之處在于:
1、在移動(dòng)指針時(shí),前者移動(dòng)到數(shù)組尾部,后者移動(dòng)指針到數(shù)組第一個(gè)單元。
2、刪除操作完成后,前者只需修改下一個(gè)數(shù)字索引的位置,而后者需要重置數(shù)組下標(biāo)。
小結(jié)如果兩個(gè)函數(shù)實(shí)現(xiàn)的步驟差不多,可以用一個(gè)參數(shù)區(qū)別執(zhí)行的是哪一個(gè)函數(shù)以減少程序中重復(fù)的代碼。
原創(chuàng)文章,文筆有限,才疏學(xué)淺,文中若有不正之處,萬(wàn)望告知。
如果本文對(duì)你有幫助,請(qǐng)點(diǎn)下推薦吧,謝謝^_^
最后再安利一下,我在github有對(duì)PHP源碼更詳細(xì)的注解。感興趣的可以圍觀一下,給個(gè)star。PHP5.4源碼注解。可以通過(guò)commit記錄查看已添加的注解。
更多源碼文章,歡迎訪問(wèn)個(gè)人主頁(yè)繼續(xù)查看:hoohack
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21614.html
摘要:下面來(lái)看一下,有哪些數(shù)據(jù)結(jié)構(gòu)屬于線性表吧棧特性先進(jìn)后出只有唯一的一個(gè)出入口介紹棧又名堆棧,它是一種運(yùn)算受限的線性表。 原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽(tīng)的背景音樂(lè)噢背景音樂(lè)已取消~ 2333333 線性表 什么是線性表?就是一種連續(xù)或間斷存儲(chǔ)的數(shù)組,這里的連續(xù)和間斷是針對(duì)物理內(nèi)存空間中線性表元素之間是否連續(xù),其中連續(xù)數(shù)組對(duì)應(yīng)內(nèi)置數(shù)組的實(shí)現(xiàn)方式,間斷數(shù)組對(duì)...
摘要:不論你想要成熟的面向?qū)ο蟮某绦蛟O(shè)計(jì),還是程序式或函數(shù)式編程,都可以做到。但我們不禁要問(wèn),擅長(zhǎng)函數(shù)式編程嗎本文系國(guó)內(nèi)管理平臺(tái)工程師編譯整理。在函數(shù)式編程中,目標(biāo)之一是減輕副作用。 許多通用程序設(shè)計(jì)語(yǔ)言試圖兼容大多數(shù)編程范式,PHP 就屬于其中之一。不論你想要成熟的面向?qū)ο蟮某绦蛟O(shè)計(jì),還是程序式或函數(shù)式編程,PHP 都可以做到。但我們不禁要問(wèn),PHP 擅長(zhǎng)函數(shù)式編程嗎?本文系國(guó)內(nèi) ITOM...
摘要:必選規(guī)定被搜索的數(shù)組可選如果設(shè)置為,則在數(shù)組中檢查給定值的類型,默認(rèn)是搜索數(shù)組中是否存在指定的值?;卣{(diào)函數(shù)接受的參數(shù)數(shù)目應(yīng)該和傳遞給函數(shù)的數(shù)組數(shù)目一致。 開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用到數(shù)組函數(shù),故特地總結(jié)出來(lái),自己熟悉,同時(shí)供大家參考?。▽?shí)例部分會(huì)抽空盡快完成) 一、目錄 array_merge(); 合并數(shù)組 array_keys(); array_filter(); in_array()...
摘要:概述我們知道,在編程語(yǔ)言中,數(shù)組的使用頻率是很高的,幾乎每個(gè)腳本都會(huì)使用到。循環(huán)缺點(diǎn)遍歷完成之后,不能對(duì)數(shù)組進(jìn)行第二次遍歷數(shù)組內(nèi)部指針指向了最后一個(gè)元素。 概述 我們知道,在 PHP 編程語(yǔ)言中,數(shù)組的使用頻率是很高的,幾乎每個(gè)腳本都會(huì)使用到。 PHP 自帶了大量的、優(yōu)秀的操作數(shù)組的函數(shù)以供我們使用,本文就對(duì)這些數(shù)組函數(shù)的使用做一些分類和總結(jié),方便大家以后查閱。 創(chuàng)建 1. range...
摘要:語(yǔ)法數(shù)組刪除數(shù)組的最后一項(xiàng)語(yǔ)法數(shù)組在數(shù)組的最末添加一項(xiàng)語(yǔ)法數(shù)組刪除數(shù)組的首項(xiàng)語(yǔ)法數(shù)組在數(shù)組的首部添加一項(xiàng)案例分析 1:數(shù)組的指針操作: 語(yǔ)法:current(數(shù)組) 當(dāng)前指針指向的單元值(默認(rèn)是第零個(gè))語(yǔ)法 next(數(shù)組) 當(dāng)前指針往下移動(dòng)一幀語(yǔ)法 prev(數(shù)組) 當(dāng)前指針往前移動(dòng)一個(gè)指針語(yǔ)法 end(array) 將當(dāng)前指針移動(dòng)到最后一項(xiàng)語(yǔ)法 ...
閱讀 1845·2021-11-23 09:51
閱讀 1304·2021-11-18 10:02
閱讀 974·2021-10-25 09:44
閱讀 2114·2019-08-26 18:36
閱讀 1634·2019-08-26 12:17
閱讀 1158·2019-08-26 11:59
閱讀 2755·2019-08-23 15:56
閱讀 3368·2019-08-23 15:05