搜尋
首頁php教程PHP开发php中array_slice和array_splice函數解析

本文主要介紹了php中array_slice和array_splice函數,感興趣的可以圍觀一下,

array_slice和array_splice函數是用在取出數組的一段切片,array_splice還有用新的切片替換原刪除切片位置的功能。類似javascript中的Array.prototype.splice和Array.prototype.slice方法。

array_slice

array 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的話會保留數組原來的數字鍵值順序。

使用實例

<?php
$input = array("a", "b", "c", "d", "e");
 
$output = array_slice($input, 2);   // returns "c", "d", and "e"
$output = array_slice($input, -2, 1); // returns "d"
$output = array_slice($input, 0, 3);  // returns "a", "b", and "c"
 
print_r(array_slice($input, 2, -1)); // array(0 => &#39;c&#39;, 1 => &#39;d&#39;);
print_r(array_slice($input, 2, -1, true)); // array(2 => &#39;c&#39;, 1 => &#39;d&#39;);

運行步驟

處理參數:offset、length

移動指針到offset指向的位置

從寫個元組

array_splice

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement = array() ]] )

刪除input中從offset開始length個元素,如果有replacement參數的話用replacement數組替換刪除掉的元素。

php中array_slice和array_splice函數解析參數說明

 array_splice函數中的offset和length參數跟array_slice函數中的用法一樣。

replacement

如果這個參數設定了,那麼函數將使用replacement數組來替換。

如果offset和length指定了沒有任何元素需要移除,那麼replacement會被插入到offset的位置。

如果replacement只有一個元素,可以不用array()去包著它。

使用範例

<?php
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input变为 array("red", "green")
 
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, -1);
// $input变为 array("red", "yellow")
 
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
// $input变为 array("red", "orange")
 
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
// $input为 array("red", "green",
//     "blue", "black", "maroon")
 
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input为 array("red", "green",
//     "blue", "purple", "yellow");

原始碼解讀

 在array_splice中,有這麼一段程式碼:

/* Don&#39;t create the array of removed elements if it&#39;s not going
  * to be used; e.g. only removing and/or replacing elements */
 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。


總結

到此本文結束,在平時編程中,應當像這兩個函數實現時的做法一樣,將最特殊的情況先處理掉,然後再繼續,以免做了多餘的判斷;有需要保存新變數的時候才申請新的空間,不然會造成浪費。

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

更多php中array_slice和array_splice函數解析相關文章請關注PHP中文網!


相關文章:

php數組函數序列之array_slice()

php array_slice函數序列之array_slice()

php array_slice函數的使用以及參數詳解

php 組
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。