四大核心函式對照
| 函式 | 操作位置 | 動作 | 回傳值 | 影響鍵名 |
| array_push($arr, $val...) | 尾端 | 推入一或多個值 | 新陣列長度 | 數值鍵重新索引 |
| array_pop($arr) | 尾端 | 彈出並移除最後一個 | 被移除的值 | 否 |
| array_unshift($arr, $val...) | 頭部 | 插入一或多個值 | 新陣列長度 | 數值鍵重新索引 |
| array_shift($arr) | 頭部 | 彈出並移除第一個 | 被移除的值 | 數值鍵重新索引 |
程式碼示範
<?php
$arr = ['a' => 'Horse', 'b' => 'Cat', 'c' => 'Dog'];
echo "原始: "; print_r($arr);
/* array_push */
array_push($arr, 'hello', 'world');
echo "push 後: "; print_r($arr);
/* 結果: [a=>Horse, b=>Cat, c=>Dog, 0=>hello, 1=>world] */
/* array_pop */
$last = array_pop($arr);
echo "pop 後 (移除 $last): "; print_r($arr);
/* array_shift */
$first = array_shift($arr);
echo "shift 後 (移除 $first): "; print_r($arr);
/* array_unshift */
array_unshift($arr, 'Horse');
echo "unshift 後: "; print_r($arr);
效能特性
- array_push/pop:O(1) 操作尾端,效能最佳。
- array_unshift/shift:O(n) 需重新索引所有數值鍵,大陣列頻繁操作頭部效能較差。
- 大量頭部操作建議改用
SplDoublyLinkedList 或反轉陣列用 push/pop 再反轉。
堆疊與佇列模擬
// 堆疊 - 後進先出
$stack = [];
array_push($stack, 1, 2, 3);
$top = array_pop($stack); // 3
// 佇列 - 先進先出
$queue = [];
array_push($queue, 1, 2, 3);
$front = array_shift($queue); // 1
常見錯誤
- 對關聯陣列使用 `array_push` 會產生數值鍵,破壞語意 → 改用 `$arr['newKey'] = $val`。
- `array_shift` 後數值鍵歸零,若程式依賴原鍵名會出錯。
- 傳遞非陣列變數會觸發 Warning,建議先 `is_array()` 檢查。