用PHP实现队列
队列的基本概念
队列是一种先进先出(FIFO)的数据结构,支持在队尾插入元素(入队),在队头删除元素(出队)。PHP中可通过数组或链表实现。
使用数组实现队列
PHP数组天然支持队列操作,结合array_push和array_shift函数即可:
$queue = [];
// 入队
array_push($queue, 'item1');
array_push($queue, 'item2');
// 出队
$firstItem = array_shift($queue);
echo $firstItem; // 输出: item1
使用SplQueue类
PHP标准库(SPL)提供了SplQueue类,专门用于队列操作:
$queue = new SplQueue();
// 入队
$queue->enqueue('item1');
$queue->enqueue('item2');
// 出队
$firstItem = $queue->dequeue();
echo $firstItem; // 输出: item1
// 查看队头元素(不删除)
$peekItem = $queue->bottom();
链表实现队列(自定义类)
通过节点类手动实现链表式队列:

class Node {
public $data;
public $next;
public function __construct($data) {
$this->data = $data;
$this->next = null;
}
}
class Queue {
private $front;
private $rear;
public function enqueue($data) {
$newNode = new Node($data);
if ($this->rear === null) {
$this->front = $this->rear = $newNode;
} else {
$this->rear->next = $newNode;
$this->rear = $newNode;
}
}
public function dequeue() {
if ($this->front === null) return null;
$temp = $this->front;
$this->front = $this->front->next;
if ($this->front === null) $this->rear = null;
return $temp->data;
}
}
// 使用示例
$q = new Queue();
$q->enqueue('item1');
$q->enqueue('item2');
echo $q->dequeue(); // 输出: item1
性能对比
- 数组队列:
array_shift操作会导致后续元素重新索引,时间复杂度为O(n) - SplQueue:基于双向链表实现,入队/出队均为O(1)
- 自定义链表队列:所有操作均为O(1),适合高频队列操作场景
线程安全考虑
在多线程环境下(如PHP-FPM),建议结合锁机制或使用SplQueue的派生类实现同步控制。






