array_slice用于读取数组片段且不改变原数组,array_splice用于修改原数组并可删除、替换或插入元素;前者默认重排数字键(可选保留),后者始终重排数字键且不支持保留键名。

array_slice 用于“读取”数组的一段,不改变原数组;array_splice 用于“修改”数组,可删除、替换、插入元素,会直接改动原数组。
作用目标不同:取值 vs 改写
array_slice 是纯函数式操作,只返回新数组,原数组完全不变。适合需要截取部分数据做临时处理的场景,比如分页取数据、提取前 N 个元素。
- 语法:
array_slice($array, $offset, $length, $preserve_keys) - 示例:
$new = array_slice($arr, 1, 3);取索引 1 开始的 3 个元素,$arr 不变
是否影响原数组:关键区别
array_splice 会直接修改传入的数组(按引用操作),同时返回被移除的片段。它不只是“切”,而是“切掉并可塞入新内容”。
ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有
- 语法:
array_splice($array, $offset, $length, $replacement) - 示例:
array_splice($arr, 2, 1, ['x', 'y']);把索引 2 处的 1 个元素删掉,插入 'x' 和 'y',$arr 被改写 - 若省略 $replacement,相当于只删除;若 $length 为 0,则只插入不删除
键名处理逻辑差异
array_slice 默认重排数字键(除非开启 $preserve_keys=true),而 array_splice 总是重排数字键,且不支持保留键名选项 —— 它的设计定位就是“结构变更”,键名重排是默认行为。
立即学习“PHP免费学习笔记(深入)”;
- 想保留原始键?array_slice 可设第 4 参数为 true;array_splice 不行
- 关联数组中,两者都保留字符串键,但数字键都会被重置(除非 slice 显式要求保留)
常见误用提醒
把 array_slice 当作“删除元素”用,或期望 array_splice 返回未改动的副本,都是典型误区。
- 错误写法:
$arr = array_slice($arr, 0, -1);—— 这只是赋值新数组,并非“删末尾”,原 $arr 仍存在,只是变量被覆盖 - 正确删末尾:
array_pop($arr)或array_splice($arr, -1) - 想复制再改?先
$copy = $arr;再对 $copy 用 array_splice










