PHP 陣列刪除首尾元素函式:array_shift、array_pop 與 array_splice 差異比較
1. 刪除最後一個元素:array_pop
$user = array('apple', 'banana', 'orange');
$result = array_pop($user);
print_r($result); // orange
print_r($user); // Array ( [0] => apple [1] => banana )
- 彈出並返回最後一個單元,陣列長度減 1。
- 若陣列為空或非陣列,返回
NULL。
2. 刪除第一個元素:array_shift
$user = array('apple', 'banana', 'orange');
$result = array_shift($user);
print_r($result); // apple
print_r($user); // Array ( [0] => banana [1] => orange )
- 移出並返回第一個單元,長度減 1,數字鍵名重新從 0 開始編排,字串鍵名不變。
- 空陣列返回
NULL。
3. 替代方案:array_splice
$user = array('apple', 'banana', 'orange');
$user = array_splice($user, 1); // 刪除第一個元素,返回被刪除部分
// $user 變為 Array ( [0] => banana [1] => orange )
array_splice($arr, $offset, $length, $replacement) 可刪除/替換任意區間。
- 刪除首元素:
array_splice($arr, 0, 1);刪除尾元素:array_splice($arr, -1)。
- 返回被移除的元素陣列,原陣列被修改並重新索引。
效能與適用場景比較
| 函式 | 用途 | 鍵名重排 | 返回值 | 效能 |
| array_pop | 刪尾 | 否 | 被刪元素值 | O(1) 最快 |
| array_shift | 刪首 | 數字鍵重排 | 被刪元素值 | O(n) 需移動所有元素 |
| array_splice | 刪任意區間 | 重排 | 被刪元素陣列 | O(n) 視長度而定 |
最佳實踐建議
- 頻繁操作陣列首尾,考慮使用
SplQueue(雙向佇列)或 SplStack(堆疊),效能 O(1)。
- 大量資料避免在迴圈中重複
array_shift,改用索引指標或 array_reverse 配合 array_pop。
- 需保留關聯鍵名時,
array_shift 會保留字串鍵,但數字鍵會重排;array_splice 同樣重排數字鍵。