应使用array_shift函数移除php数组首元素并返回其值,该函数会修改原数组并重置数字索引;也可通过empty检查、手动键值重组或foreach遍历等方式安全实现。

如果您需要从PHP数组的开头移除一个元素,并返回被移除的值,则可以使用内置函数array_shift。该函数会修改原数组,使其索引重新从0开始排列。以下是实现此操作的多种方法:
一、使用array_shift函数直接删除首元素
array_shift函数专用于移除数组的第一个元素,并将剩余元素向前移动一位,同时重置数字索引。该函数适用于索引数组和关联数组,但仅影响键为0的元素(即逻辑上的“开头”)。
1、定义一个索引数组,例如 $arr = [10, 20, 30, 40];
2、调用 $removed = array_shift($arr); 此时 $removed 的值为 10,$arr 变为 [20, 30, 40];
立即学习“PHP免费学习笔记(深入)”;
3、若原数组为空,array_shift返回 NULL,且不触发警告。
二、结合isset判断后安全调用array_shift
在不确定数组是否非空的情况下,先验证数组长度可避免误操作导致逻辑异常。此方式增强代码健壮性,尤其适用于用户输入或外部数据源。
1、使用 if (!empty($arr)) { $first = array_shift($arr); } 进行前置检查;
2、若需保留原始数组副本,先执行 $copy = $arr; 再对 $copy 调用 array_shift;
3、注意:empty() 对含0值的数组(如 [0, 1, 2])仍返回 false,因此适用于常规非空判定。
三、手动模拟array_shift行为(不使用内置函数)
当无法使用array_shift(如受限环境或教学演示)时,可通过键值重组实现相同效果。该方法显式控制键名与值的映射关系,有助于理解内部机制。
1、获取原数组第一个键:$first_key = key($arr);
2、保存对应值:$first_value = $arr[$first_key];
3、使用 unset($arr[$first_key]) 删除首个元素;
4、对剩余数组调用 $arr = array_values($arr) 以重置数字索引,结果等效于 array_shift 返回值为 $first_value,$arr 为后续元素组成的索引数组。
四、处理关联数组时保留键名结构的替代方案
array_shift会丢弃原键名并强制重索引,若需保持其余键名不变且仅移除第一个键值对,应采用foreach+break方式提取并重建数组。
1、初始化空数组 $new_arr = [];
2、使用 $found_first = false; 遍历原数组 foreach ($arr as $k => $v) { if (!$found_first) { $first = $v; $found_first = true; continue; } $new_arr[$k] = $v; };
3、操作完成后,$first 存储被删首元素值,$new_arr 包含其余键值对,原始键名未被修改。









