
PHP数组怎么跳过第一个元素
直接用 array_slice() 最稳妥,它不修改原数组、支持关联键、还能指定起始位置和长度。
常见错误是用 unset() 后再 array_values() 重排索引——这会破坏原有键名,且对大数组性能差;还有人误用 next() 配合 foreach,但那只是跳过遍历中的第一个,不是真正截取子数组。
-
array_slice($arr, 1):从索引 1 开始取到末尾,保留原键(关联数组)或重排数字索引(索引数组) - 如果明确要数字索引且不想保留键,加第三个参数
true:array_slice($arr, 1, null, true) - 注意:
array_slice()第二个参数是偏移量,不是“跳过几个”,所以跳第一个就填1,跳前两个填2
foreach 循环里跳过第一个元素
适合只读遍历、不想生成新数组的场景。关键是用一个布尔标记控制是否已跳过,而不是依赖 key() 或 current() ——它们在循环中不稳定。
$first = true;
foreach ($arr as $key => $value) {
if ($first) {
$first = false;
continue;
}
// 这里处理从第二个开始的元素
}
别用 reset() + next() 混合 foreach,PHP 的 foreach 有自己的内部指针,手动操作容易错位。
立即学习“PHP免费学习笔记(深入)”;
使用 array_shift() 后继续处理剩余元素
array_shift() 会**修改原数组**,并返回被移除的第一个元素。如果你后续还要用原数组、或者需要这个被跳过的值,它才合适。
- 执行后原数组长度减一,所有数字索引重排,关联键不受影响
- 如果只是跳过、不需要那个值,用
array_shift()是浪费——它做了写操作,还多一次返回赋值 - 性能上比
array_slice()稍差,尤其对大数组,因为要移动内存
关联数组里跳过第一个 key 对应的元素
PHP 数组没有“插入顺序保证”这种说法——它有,但仅限于语言层面的实现保证(自 PHP 7.4 起稳定),不能当规范依赖。所谓“第一个 key”,实际是指 key(array_keys($arr)) 对应的那个。
更安全的做法是显式提取 keys:
$keys = array_keys($arr);
if (!empty($keys)) {
$firstKey = $keys[0];
unset($arr[$firstKey]);
// 注意:unset 后键还在,要用 array_values() 强制重索引(如需)
这里最容易忽略的是:unset() 不会自动重排索引,foreach 遍历时仍能看到空洞,而 json_encode() 会输出 null 占位——除非你明确调用 array_values()。



















