PHP 陣列本質是有序映射,但透過內建函數可輕鬆模擬堆疊(LIFO)與佇列(FIFO)行為。本文系統梳理四大棧操作函數的語法、返回值差異與性能特徵,並提供最佳實踐建議。
<?php $stack = ["Simon", "Elaine"]; array_push($stack, "Helen", "Peter"); // 一次壓入多個元素 print_r($stack); /* 輸出: Array ( [0] => Simon [1] => Elaine [2] => Helen [3] => Peter ) */ ?>
<?php $stack = ["Simon", "Elaine", "Helen", "Peter"]; echo array_pop($stack) . "\n"; // 輸出:Peter print_r($stack); // 剩餘:Simon, Elaine, Helen ?>
NULL。array_push + array_pop = 標準 LIFO 堆疊。<?php $stack = ["Simon", "Elaine"]; array_unshift($stack, "Helen", "Peter"); print_r($stack); /* 輸出: Array ( [0] => Helen [1] => Peter [2] => Simon [3] => Elaine ) */ ?>
<?php $stack = ["Simon", "Elaine", "Helen", "Peter"]; echo array_shift($stack) . "\n"; // 輸出:Simon print_r($stack); // 剩餘:Elaine, Helen, Peter ?>
array_push + array_shift = FIFO 佇列;或 array_unshift + array_pop = 反向佇列。| 操作 | 函數組合 | 時間複雜度 | 適用場景 |
|---|---|---|---|
| 堆疊 (LIFO) | push + pop | O(1) | 遞歸回溯、表達式求值、瀏覽歷史 |
| 佇列 (FIFO) | push + shift | O(n) | 任務調度、訊息隊列、BFS 遍歷 |
| 雙端佇列 | push/pop + unshift/shift | 混合 | 滑動窗口、回文判斷 |
PHP SPL 提供原生堆疊/佇列類,封裝陣列操作並提供型別提示:
<?php
$stack = new SplStack();
$stack->push('A')->push('B');
echo $stack->pop(); // B
$queue = new SplQueue();
$queue->enqueue('A')->enqueue('B');
echo $queue->dequeue(); // A
?>
大型專案建議使用 SPL 類,代碼語義更清晰,且享受引擎層優化。