摘要:和函數(shù)是用在取出數(shù)組的一段切片,還有用新的切片替換原刪除切片位置的功能。類似中的和方法。我在有對源碼更詳細的注解。返回數(shù)組中指定下標和長度的子數(shù)組切片。參數(shù)說明設(shè)第一個參數(shù)數(shù)組的長度為。如果處理后還是小于,則直接返回。
array_slice和array_splice函數(shù)是用在取出數(shù)組的一段切片,array_splice還有用新的切片替換原刪除切片位置的功能。類似javascript中的Array.prototype.splice和Array.prototype.slice方法。
我在github有對PHP源碼更詳細的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解??梢酝ㄟ^commit記錄查看已添加的注解。
array_slicearray array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
返回數(shù)組中指定下標offset和長度length的子數(shù)組切片。
參數(shù)說明設(shè)第一個參數(shù)數(shù)組的長度為num_in。
offset如果offset是正數(shù)且小于length,則返回數(shù)組會從offset開始;如果offset大于length,則不操作,直接返回。如果offset是負數(shù),則offset = num_in+offset,如果num_in+offset == 0,則將offset設(shè)為0。
length如果length小于0,那么會將length轉(zhuǎn)為num_in - offset + length;否則,如果offset+length > array_count,則length = num_in - offset。如果處理后length還是小于0,則直接返回。
preserve_keys默認是false,默認不保留數(shù)字鍵值原順序,設(shè)為true的話會保留數(shù)組原來的數(shù)字鍵值順序。
使用實例"c", 1 => "d"); print_r(array_slice($input, 2, -1, true)); // array(2 => "c", 1 => "d");運行步驟
處理參數(shù):offset、length 移動指針到offset指向的位置 從offset開始,拷貝length個元素到返回數(shù)組
運行流程圖如下
array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement = array() ]] )
刪除input中從offset開始length個元素,如果有replacement參數(shù)的話用replacement數(shù)組替換刪除掉的元素。
參數(shù)說明array_splice函數(shù)中的offset和length參數(shù)跟array_slice函數(shù)中的用法一樣。
replacement如果這個參數(shù)設(shè)置了,那么函數(shù)將使用replacement數(shù)組來替換。
如果offset和length指定了沒有任何元素需要移除,那么replacement會被插入到offset的位置。
如果replacement只有一個元素,可以不用array()去包著它。
使用示例源碼解讀在array_splice中,有這么一段代碼:
if (return_value_used) { // 如果有用到函數(shù)返回值則創(chuàng)建返回數(shù)組,否則不創(chuàng)建返回數(shù)組 int size = length; /* Clamp the offset.. */ if (offset > num_in) { offset = num_in; } else if (offset < 0 && (offset = (num_in + offset)) < 0) { offset = 0; } /* ..and the length */ if (length < 0) { size = num_in - offset + length; } else if (((unsigned long) offset + (unsigned long) length) > (unsigned) num_in) { size = num_in - offset; } /* Initialize return value */ array_init_size(return_value, size > 0 ? size : 0); rem_hash = &Z_ARRVAL_P(return_value); }array_splice函數(shù)返回的是被刪除的切片。這段代碼的意思是,如果array_splice需要返回值,那么才創(chuàng)建返回數(shù)組,否則不創(chuàng)建,以免浪費空間。這也是一個編程小技巧,僅當需要的時候才返回。比如在函數(shù)中使用$result = array_splice(...),那么return_value_used就是true。
總結(jié)到此本文結(jié)束,在平時編程中,應(yīng)當像這兩個函數(shù)實現(xiàn)時的做法一樣,將最特殊的情況先處理掉,然后再繼續(xù),以免做了多余的判斷;有需要保存新變量的時候才申請新的空間,不然會造成浪費。
原創(chuàng)文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。
如果本文對你有幫助,請點下推薦吧,謝謝^_^
最后再安利一下,我在github有對PHP源碼更詳細的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解??梢酝ㄟ^commit記錄查看已添加的注解。
更多源碼文章,歡迎訪問個人主頁繼續(xù)查看:hoohack
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21751.html
摘要:概述我們知道,在編程語言中,數(shù)組的使用頻率是很高的,幾乎每個腳本都會使用到。循環(huán)缺點遍歷完成之后,不能對數(shù)組進行第二次遍歷數(shù)組內(nèi)部指針指向了最后一個元素。 概述 我們知道,在 PHP 編程語言中,數(shù)組的使用頻率是很高的,幾乎每個腳本都會使用到。 PHP 自帶了大量的、優(yōu)秀的操作數(shù)組的函數(shù)以供我們使用,本文就對這些數(shù)組函數(shù)的使用做一些分類和總結(jié),方便大家以后查閱。 創(chuàng)建 1. range...
摘要:是語句不是函數(shù),有返回值,只能輸出一個變量,不需要圓括號。這些特性使成為理想的數(shù)據(jù)交換語言。如果子類中定義了構(gòu)造函數(shù)則不會隱式調(diào)用其父類的構(gòu)造函數(shù)。要執(zhí)行父類的構(gòu)造函數(shù),需要在子類的構(gòu)造函數(shù)中調(diào)用。 PHP HTTP Keep-Alive的作用 作用 Keep-Alive:使客戶端到服務(wù)器端的連接持續(xù)有效,當出現(xiàn)對服務(wù)器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。...
摘要:獲取元素數(shù)量獲取數(shù)組元素總數(shù)獲取所有的鍵獲取數(shù)組所有鍵組成的數(shù)組。遍歷數(shù)組元素獲取數(shù)組當前元素。數(shù)組指針前移一步。數(shù)組指針指向最后一個元素。其他數(shù)組操作反轉(zhuǎn)數(shù)組。隨機取出數(shù)組元素。對數(shù)組的所有值求和。 這幾天工作之余整理和分類了PHP 中常用的數(shù)組相關(guān)的函數(shù)。如有錯誤和遺漏,請留言指正! 數(shù)組函數(shù)整理 創(chuàng)建數(shù)組函數(shù) array array ([ mixed $... ] ):創(chuàng)建數(shù)組...
摘要:不論你想要成熟的面向?qū)ο蟮某绦蛟O(shè)計,還是程序式或函數(shù)式編程,都可以做到。但我們不禁要問,擅長函數(shù)式編程嗎本文系國內(nèi)管理平臺工程師編譯整理。在函數(shù)式編程中,目標之一是減輕副作用。 許多通用程序設(shè)計語言試圖兼容大多數(shù)編程范式,PHP 就屬于其中之一。不論你想要成熟的面向?qū)ο蟮某绦蛟O(shè)計,還是程序式或函數(shù)式編程,PHP 都可以做到。但我們不禁要問,PHP 擅長函數(shù)式編程嗎?本文系國內(nèi) ITOM...
摘要:返回的綁定函數(shù)也能使用操作符創(chuàng)建對象這種行為就像把原函數(shù)當成構(gòu)造器。同時,將第一個參數(shù)以外的其他參數(shù),作為提供給原函數(shù)的預(yù)設(shè)參數(shù),這也是基本的顆?;A(chǔ)。 今天想談?wù)勔坏狼岸嗣嬖囶},我做面試官的時候經(jīng)常喜歡用它來考察面試者的基礎(chǔ)是否扎實,以及邏輯、思維能力和臨場表現(xiàn),題目是:模擬實現(xiàn)ES5中原生bind函數(shù)。也許這道題目已經(jīng)不再新鮮,部分讀者也會有思路來解答。社區(qū)上關(guān)于原生bind的研...
閱讀 2498·2021-08-11 11:16
閱讀 2938·2019-08-30 15:55
閱讀 3337·2019-08-30 12:53
閱讀 1578·2019-08-29 13:28
閱讀 3271·2019-08-28 18:17
閱讀 944·2019-08-26 12:19
閱讀 2475·2019-08-23 18:27
閱讀 712·2019-08-23 18:17