php中栈用数组实现,以array_push()和array_pop()遵循lifo原则;支持初始化、入栈、出栈、peek、判空及长度获取,括号匹配验证是典型应用。

PHP 中实现栈结构,核心是遵循“后进先出”(LIFO)原则,用数组配合 array_push() 和 array_pop() 就能高效完成基础操作,无需额外类封装也能清晰表达逻辑。
初始化与入栈(push)
栈通常用索引数组表示。入栈即向数组末尾添加元素,array_push() 是最直接的方式:
- 定义空数组作为栈:
$stack = []; - 依次入栈:
array_push($stack, 'a', 'b', 'c');→ 栈变为['a','b','c'],'c' 在栈顶 - 也可用
$stack[] = $value;替代,效果相同但语义稍弱
出栈与查看栈顶(pop / peek)
array_pop() 移除并返回最后一个元素,天然符合出栈行为;若只查看不移除(peek),直接用下标 $stack[count($stack)-1] 或 end($stack)(注意 end() 会重置内部指针):
- 出栈:
$top = array_pop($stack);→ 返回 'c',栈变为['a','b'] - 查看栈顶(不修改):
$top = !empty($stack) ? $stack[count($stack)-1] : null;,避免空栈报错
判断是否为空与获取长度
栈空判断用 empty() 最简洁;长度直接用 count(),无需维护额外计数器:
- 判空:
if (empty($stack)) { echo "栈已空"; } - 长度:
$size = count($stack);,时间复杂度 O(1) - 注意:不要用
sizeof(),它只是count()的别名,可读性差
完整小示例:括号匹配验证
用栈解决经典问题——检查字符串中括号是否合法嵌套:
- 遍历字符,遇左括号入栈,遇右括号时检查栈顶是否匹配并出栈
- 结束时栈为空才表示全部匹配
- 代码片段:
$stack = []; $pairs = [')' => '(', ']' => '[', '}' => '{']; foreach (str_split($s) as $ch) { if (in_array($ch, $pairs)) array_push($stack, $ch); elseif (isset($pairs[$ch]) && (!empty($stack) && array_pop($stack) !== $pairs[$ch])) return false; } return empty($stack);
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











