php中实现队列最直接的方式是用array_push()和array_shift()模拟fifo,封装为queue类支持enqueue、dequeue、front、isempty等操作,兼顾简洁性与可维护性。

PHP 中实现队列(Queue)最直接的方式是利用内置数组函数 array_push() 和 array_shift(),遵循“先进先出”(FIFO)原则。无需依赖外部扩展,纯原生代码即可完成基础队列操作。
用数组模拟队列的四个核心操作
一个完整队列应支持:入队(enqueue)、出队(dequeue)、查看队首(front)、判断是否为空(isEmpty)。PHP 数组天然适配这些行为:
-
入队:用
array_push($queue, $item)将元素添加到数组末尾 -
出队:用
array_shift($queue)移除并返回数组第一个元素 -
查看队首:检查
!empty($queue) ? $queue[0] : null -
判空:直接用
empty($queue),简洁可靠
封装成类更利于复用和维护
将逻辑封装为 Queue 类,避免全局变量污染,也便于后续扩展(如加长度限制、类型约束):
class Queue {
private $data = [];
public function enqueue($item) {
array_push($this->data, $item);
}
public function dequeue() {
return array_shift($this->data);
}
public function front() {
return !empty($this->data) ? $this->data[0] : null;
}
public function isEmpty() {
return empty($this->data);
}
public function size() {
return count($this->data);
}
}
使用时只需 $q = new Queue(); $q->enqueue('a'); echo $q->dequeue(); —— 清晰、可控、符合面向对象习惯。
注意 array_shift 的性能细节
array_shift() 在底层会重排数组键名,时间复杂度为 O(n),大数据量时可能有轻微开销。若对性能极度敏感(如百万级队列),可改用双端队列思路:用 array_unshift() 入队 + array_pop() 出队(即把数组当“反向队列”用),或借助 SPL 的 SplQueue 类(基于链表,O(1) 出队):
$q = new SplQueue(); $q->enqueue($x); $q->dequeue();-
SplQueue支持迭代器,可foreach ($q as $item)遍历,且不重排内部结构
简单测试验证逻辑正确性
写两行测试代码就能确认队列行为是否符合 FIFO:
例如:$q = new Queue();
$q->enqueue('first');
$q->enqueue('second');
echo $q->dequeue(); // 输出 'first'
echo $q->dequeue(); // 输出 'second'
输出顺序与插入顺序一致,说明实现无误。调试时可加 var_dump($q->size()) 辅助观察状态变化。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











