array_splice 直接修改原数组,删除并可插入元素;$offset 支持负数,$length 为 null 删至末尾、为 0 则只插入;$replacement 须为数组才能展开,返回被删元素组成的重排数组。

array_splice 修改数组时会直接改原数组
它不像 array_slice 那样返回新数组副本,而是就地修改——原数组内容会被删掉指定片段,并插入新元素(如果提供了的话)。这点容易被忽略,导致后续逻辑读到意外变更后的数组。
- 如果不传第四个参数(
$replacement),就只是删除:从$offset开始删$length个元素 - 如果传了
$replacement,它会先删再插;$replacement可以是数组,也可以是单个值(会被自动转成单元素数组) -
$offset支持负数:-1 表示倒数第一个,-2 倒数第二个…… -
$length为 null 时,表示删到末尾;为 0 时,不删只插(相当于在指定位置“插入”)
替换数组某一段时要注意 $replacement 的类型
传字符串、数字或对象进去,array_splice 会把它当做一个「元素」塞进数组,而不是展开。比如你想用 "x" 替换两个位置,结果是插入一个字符串,不是两个字符。
- 正确插入多个值:传数组,如
["a", "b"] - 错误写法:
array_splice($arr, 1, 2, "a,b")→ 得到[..., "a,b", ...],不是你想要的两个元素 - 如果只有单个值要插,写成
["val"]最安全,避免类型隐式转换干扰
用 array_splice 实现数组头部/尾部增删
不需要手写循环或组合多个函数,靠偏移量就能搞定常见操作:
- 头部插入:
array_splice($arr, 0, 0, ["new1", "new2"]) - 头部删除前 N 个:
array_splice($arr, 0, $n) - 尾部插入:
array_splice($arr, count($arr), 0, ["last"])或简写为array_splice($arr, -0, 0, ["last"])(但推荐用count()更清晰) - 尾部删除最后 N 个:
array_splice($arr, -$n)
注意:尾部操作中,$length 为负数是非法的,只能靠负的 $offset 配合默认 $length=null 来实现删尾。
返回值是被删掉的元素组成的数组
这个返回值常被忽略,但它很有用——比如你要把中间一段提出来单独处理,又不想用 array_slice + unset 两步走。
- 例如:
$removed = array_splice($arr, 2, 3);→$removed是原数组索引 2~4 的三个元素组成的数组,$arr已被删掉这部分 - 如果没删任何元素(如
$length=0),返回空数组[],不是null - 返回的是索引重排后的数组,键名不会保留(和
array_values效果一致)
真正难搞的是嵌套结构里错用 offset 导致越界却不报错,只静默截断——建议操作前先 isset($arr[$offset]) 或检查 count($arr)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











