首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現堆疊結構:array_push/pop 與 unshift/shift 完整指南

     編輯:PHP 相關知識

PHP 實現堆疊結構:array_push/pop 與 unshift/shift 完整指南

PHP 陣列本質是有序映射,但透過內建函數可輕鬆模擬堆疊(LIFO)與佇列(FIFO)行為。本文系統梳理四大棧操作函數的語法、返回值差異與性能特徵,並提供最佳實踐建議。

1. array_push() - 陣列末尾入棧(推薦用於堆疊)

<?php
$stack = ["Simon", "Elaine"];
array_push($stack, "Helen", "Peter"); // 一次壓入多個元素
print_r($stack);
/* 輸出:
Array ( [0] => Simon [1] => Elaine [2] => Helen [3] => Peter )
*/
?>
  • 返回值:新陣列長度(整數)。
  • 性能:O(1) 平均時間複雜度,適合高頻入棧。

2. array_pop() - 陣列末尾出棧(堆疊核心)

<?php
$stack = ["Simon", "Elaine", "Helen", "Peter"];
echo array_pop($stack) . "\n"; // 輸出:Peter
print_r($stack); // 剩餘:Simon, Elaine, Helen
?>
  • 返回值:被移除的元素值;陣列為空返回 NULL。
  • 配對使用:array_push + array_pop = 標準 LIFO 堆疊。

3. array_unshift() - 陣列開頭入棧(佇列入隊)

<?php
$stack = ["Simon", "Elaine"];
array_unshift($stack, "Helen", "Peter");
print_r($stack);
/* 輸出:
Array ( [0] => Helen [1] => Peter [2] => Simon [3] => Elaine )
*/
?>
  • 特性:所有現有元素數值鍵重新索引(+n),關聯鍵不變。
  • 性能:O(n) 需移動所有元素,大陣列慎用。

4. array_shift() - 陣列開頭出棧(佇列出隊)

<?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 + popO(1)遞歸回溯、表達式求值、瀏覽歷史
佇列 (FIFO)push + shiftO(n)任務調度、訊息隊列、BFS 遍歷
雙端佇列push/pop + unshift/shift混合滑動窗口、回文判斷

進階替代方案:SplStack / SplQueue

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 類,代碼語義更清晰,且享受引擎層優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved