array_pop()和array_shift()主要区别在于操作位置、性能与索引处理:前者从末尾o(1)移除元素,后者从开头o(n)移除并重排数字键;空数组均返回null,需预先判断;适用场景分别为栈(lifo)和队列(fifo)头部操作。

主要差别在操作位置、性能表现和索引处理方式上。
操作位置不同
array_pop() 作用于数组末尾,移除并返回最后一个元素;array_shift() 作用于数组开头,移除并返回第一个元素。
- 对
['a', 'b', 'c']调用array_pop()→ 返回'c',剩下['a', 'b'] - 对同一数组调用
array_shift()→ 返回'a',剩下['b', 'c']
时间复杂度差异明显
array_pop() 是 O(1),执行极快;array_shift() 是 O(n),数组越大越慢。
- array_pop() 只需调整内部指针和长度,不涉及元素移动
- array_shift() 必须把后面所有元素向前平移一位,并重排数字键(如 1→0、2→1…),文字键保留不变
- 处理上千元素的数组时,array_shift() 可能比 array_pop() 慢几十倍
空数组行为一致但需注意
两者在空数组上调用都返回 NULL,且不报错、不警告。
- 这个静默失败容易引发后续错误,比如用返回值当数组再取
[0]就会触发“Trying to access array offset on value of type null” - 建议使用前加判断:
if (!empty($arr)) { $val = array_shift($arr); }
适用场景倾向不同
array_pop() 天然适合栈(LIFO)结构;array_shift() 更贴近队列(FIFO)头部操作,但大数组下建议替代方案。
- 高频出栈:优先用 array_pop()
- 需要“队首出列”又处理大数组:可考虑
array_reverse() + array_pop(),避免重索引开销 - 若只需读取不删除,直接用
$arr[0]或end($arr)更轻量
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











