搜尋
首頁後端開發PHP問題php數組如何分段

php數組如何分段

Sep 28, 2019 pm 01:17 PM
php分段陣列

php數組如何分段

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陣列

使用實例

<?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指向的位置

·從offset開始,拷貝length個元素到返回數組

運行流程圖如下:

php數組如何分段

array_splice

#
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()去包著它。

使用範例

<?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數組如何分段的詳細內容。更多資訊請關注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 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器