array_slice用于读取数组片段且不改变原数组,array_splice用于修改原数组并可删除、替换或插入元素;前者默认重排数字键(可选保留),后者始终重排数字键且不支持保留键名。
array_slice
用于“读取”数组的一段,不改变原数组;
array_splice
用于“修改”数组,可删除、替换、插入元素,会直接改动原数组。
作用目标不同:取值 vs 改写
array_slice 是纯函数式操作,只返回新数组,原数组完全不变。适合需要截取部分数据做临时处理的场景,比如分页取数据、提取前 N 个元素。
语法:
示例:
取索引 1 开始的 3 个元素,$arr 不变
是否影响原数组:关键区别
array_splice 会直接修改传入的数组(按引用操作),同时返回被移除的片段。它不只是“切”,而是“切掉并可塞入新内容”。
语法:
示例:
把索引 2 处的 1 个元素删掉,插入 'x' 和 'y',$arr 被改写
若省略 $replacement,相当于只删除;若 $length 为 0,则只插入不删除
键名处理逻辑差异
array_slice 默认重排数字键(除非开启 $preserve_keys=true),而 array_splice 总是重排数字键,且不支持保留键名选项 —— 它的设计定位就是“结构变更”,键名重排是默认行为。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
想保留原始键?array_slice 可设第 4 参数为 true;array_splice 不行
关联数组中,两者都保留字符串键,但数字键都会被重置(除非 slice 显式要求保留)
常见误用提醒
把 array_slice 当作“删除元素”用,或期望 array_splice 返回未改动的副本,都是典型误区。
错误写法:
—— 这只是赋值新数组,并非“删末尾”,原 $arr 仍存在,只是变量被覆盖
正确删末尾:
或
想复制再改?先
再对 $copy 用 array_splice
array_slice($array, $offset, $length, $preserve_keys)$new = array_slice($arr, 1, 3);array_splice($array, $offset, $length, $replacement)array_splice($arr, 2, 1, ['x', 'y']);$arr = array_slice($arr, 0, -1);array_pop($arr)array_splice($arr, -1)$copy = $arr;