在PHP 中, array_slice函數是用來從數組中提取一段子數組的常用工具。它的函數原型如下:
array array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)
其中,參數$length用來指定要截取的元素數量。但是當$length為0或NULL時,行為表現上卻有所不同。本文將詳細分析這兩種情況下array_slice的區別。
$array :輸入的數組。
$offset :從哪個位置開始截取,支持負數。
$length :截取的元素數目,默認NULL表示一直截取到數組末尾。
$preserve_keys :是否保持原數組的鍵名。
當你調用array_slice時,如果沒有傳入$length參數或者傳入的值是NULL ,PHP 會從$offset開始一直截取到數組末尾。
示例:
$arr = [1, 2, 3, 4, 5];
$result = array_slice($arr, 2, NULL);
print_r($result);
輸出:
Array
(
[0] => 3
[1] => 4
[2] => 5
)
解釋:從索引2 開始,截取到數組末尾。
當$length明確設置為0時, array_slice會返回一個空數組。也就是說,不管數組有多長,截取的長度為零,意味著沒有任何元素被返回。
示例:
$arr = [1, 2, 3, 4, 5];
$result = array_slice($arr, 2, 0);
print_r($result);
輸出:
Array
(
)
解釋:指定長度為0,不截取任何元素。
length 參數 | 返回結果 | 說明 |
---|---|---|
NULL | 從offset 到數組末尾所有元素 | 默認行為,截取所有剩餘元素 |
0 | 空數組 | 截取長度為0,結果為空數組 |
如果想截取到數組尾部,建議省略$length參數或顯式傳NULL 。
如果你想避免無意中返回空數組,注意不要將$length設為0 。
對於動態傳入的參數,做好類型判斷,避免傳入0影響結果。
$arr = ['a' => 1, 'b' => 2, 'c' => 3];
$result = array_slice($arr, 1, NULL, true);
print_r($result);
輸出:
Array
(
[b] => 2
[c] => 3
)
這里傳入NULL截取所有剩餘元素,同時保持了原鍵名。