Array_splice 是 php 中直接修改原数组以删除、替换或插入元素的函数,支持负偏移量和灵活长度控制,但会重置关联数组键名且不返回新数组。

array_splice 是 PHP 中用于删除、替换或插入数组元素的核心函数,它直接修改原数组(而非返回新数组),适合做“原地”结构调整。
删除数组中指定位置的元素
只传入前两个参数时,array_splice 会从指定索引开始删除指定数量的元素,并返回被删部分:
- 语法:
array_splice($array, $offset, $Length) -
$offset支持负数(从末尾计数),$length可省略(默认删到末尾) - 原数组被修改,返回值是被删除的子数组
例如:
$arr = ['a', 'b', 'c', 'd'];<br> $removed = array_splice($arr, 1, 2); // 删除索引1开始的2个元素<br> // $arr 变为 ['a', 'd'],$removed 是 ['b', 'c']
用新元素替换原位置内容
传入第四个参数(数组)即可实现“删除+插入”一体化操作:
- 新元素会从
$offset处开始插入,覆盖原有位置 - 若
$length为 0,则不删除,只在指定位置插入(类似“中间插入”) - 新元素可以是任意数组,包括空数组(等效于纯删除)
例如:
$arr = [1, 2, 3, 4];<br> array_splice($arr, 2, 1, ['x', 'y']); // 删除索引2的元素,插入['x','y']<br> // $arr 变为 [1, 2, 'x', 'y', 4]
在数组开头或末尾插入元素
利用 $offset 的正负特性,可灵活控制插入点:
立即学习“PHP免费学习笔记(深入)”;
- 开头插入:
array_splice($arr, 0, 0, $new)($length=0 表示不删) - 末尾插入:
array_splice($arr, count($arr), 0, $new)或array_splice($arr, -0, 0, $new)(但推荐用array_merge或[]追加更直观) - 注意:负数 offset 从末尾倒数,
-1表示最后一个元素位置,-0等同于0
常见陷阱与注意事项
使用 array_splice 时容易忽略的关键点:
- 它总是**修改原数组**,不会创建副本;如需保留原数组,请先
$copy = $arr -
$offset超出范围时行为不同:过大则插入到末尾,过小(如 -100)则从开头处理 - 关联数组的键名会被重置为数字索引(即使只删不插),如需保留键名,考虑用 unset + array_values 组合
- 不支持资源类型和某些特殊结构(如对象属性数组需谨慎)
不复杂但容易忽略细节。