在 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 截取所有剩余元素,同时保持了原键名。