在PHP开发中,数组是最常用的数据结构之一,很多时候我们需要从完整的数组中提取出部分元素,也就是截取数组的操作。PHP内置了多个可用于数组截取的函数,不同函数的适用场景有所区别,下面来详细介绍相关的使用技巧。

一、array_slice函数:非破坏性截取数组
array_slice是PHP中最常用的数组截取函数,它的特点是不会修改原数组,而是返回截取后得到的新数组,适合只需要获取部分数组元素,不需要改变原数组的场景。
1. 函数基本语法
该函数的语法结构如下:
<?php /** * @param array $array 需要截取的原始数组 * @param int $offset 起始位置,正数表示从数组开头第offset位开始,负数表示从数组末尾倒数第offset位开始 * @param int|null $length 截取的长度,可选参数,不填则截取到数组末尾;正数表示截取length个元素,负数表示截取到倒数第length位 * @param bool $preserve_keys 是否保留原数组的键名,默认false会重置数字键名,true则保留原键名 * @return array 截取后得到的新数组 */ array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array ?>
2. 基础使用示例
下面是几个常见的使用场景示例:
<?php $origin_arr = [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f']; // 从索引1开始,截取2个元素,默认不保留原键名 $slice1 = array_slice($origin_arr, 1, 2); print_r($slice1); // 输出:Array ( [0] => b [1] => c ) // 从倒数第3位开始,截取到数组末尾 $slice2 = array_slice($origin_arr, -3); print_r($slice2); // 输出:Array ( [0] => d [1] => e [2] => f ) // 保留原数组的键名 $slice3 = array_slice($origin_arr, 1, 2, true); print_r($slice3); // 输出:Array ( [1] => b [2] => c ) // 原数组不会被修改 print_r($origin_arr); // 输出:Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f ) ?>
二、array_splice函数:破坏性截取并替换数组
array_splice同样可以实现数组截取,但是它会直接修改原数组,并且支持在截取的位置插入新的元素,适合需要修改原数组的场景。
1. 函数基本语法
该函数的语法结构如下:
<?php /** * @param array &$array 需要操作的原始数组,注意是引用传递,函数执行后会修改该数组 * @param int $offset 起始位置,规则和array_slice一致 * @param int|null $length 截取的长度,规则和array_slice一致,不填则截取到数组末尾 * @param mixed $replacement 可选参数,用于在截取的位置插入的新元素,可以是单个值或者数组 * @return array 被截取出来的元素组成的新数组 */ array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []): array ?>
2. 基础使用示例
下面是几个常见的使用场景示例:
<?php $origin_arr = [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f']; // 从索引1开始截取2个元素,不插入新元素,原数组会被修改 $slice1 = array_splice($origin_arr, 1, 2); print_r($slice1); // 输出:Array ( [0] => b [1] => c ) print_r($origin_arr); // 输出:Array ( [0] => a [1] => d [2] => e [3] => f ) // 重新初始化数组,从索引1开始截取2个元素,插入新元素 $origin_arr2 = [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f']; $slice2 = array_splice($origin_arr2, 1, 2, ['x', 'y']); print_r($slice2); // 输出:Array ( [0] => b [1] => c ) print_r($origin_arr2); // 输出:Array ( [0] => a [1] => x [2] => y [3] => d [4] => e [5] => f ) ?>
三、两个函数的核心区别
为了更清晰地区分两个函数的使用场景,我们可以通过表格对比两者的核心差异:
| 对比项 | array_slice | array_splice |
|---|---|---|
| 是否修改原数组 | 否,返回新数组 | 是,直接修改传入的数组 |
| 是否支持插入元素 | 不支持 | 支持,可通过第四个参数插入新元素 |
| 返回值 | 截取得到的新数组 | 被截取出来的元素组成的新数组 |
| 适用场景 | 仅需获取部分数组元素,不修改原数组 | 需要修改原数组,或者需要替换部分数组元素 |
四、实际开发场景示例
在实际开发中,我们可以根据需求选择合适的函数:
场景1:分页获取数组数据
比如有一个用户列表数组,需要按每页2条数据分页,获取第2页的数据:
<?php $user_list = ['张三', '李四', '王五', '赵六', '钱七', '孙八']; $page = 2; // 第2页 $page_size = 2; // 每页2条 // 计算起始偏移量:(页码-1)*每页数量 $offset = ($page - 1) * $page_size; $page_data = array_slice($user_list, $offset, $page_size); print_r($page_data); // 输出:Array ( [0] => 王五 [1] => 赵六 ) ?>
场景2:删除数组中的部分元素
比如需要删除数组中的第2到第3个元素:
<?php $arr = [10, 20, 30, 40, 50]; // 从索引1开始,截取2个元素(即20和30),不插入新元素,相当于删除这两个元素 array_splice($arr, 1, 2); print_r($arr); // 输出:Array ( [0] => 10 [1] => 40 [2] => 50 ) ?>
掌握这两个数组截取函数的用法和区别,就可以应对大部分PHP开发中的数组截取需求,根据实际场景选择合适的函数即可。
PHP数组截取array_slicearray_splice数组操作修改时间:2026-07-23 21:12:43