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