当前位置:首页 > PHP

用PHP实现队列

2026-03-13 09:47:45PHP

队列的基本概念

队列是一种先进先出(FIFO)的数据结构,支持在队尾插入元素(入队),在队头删除元素(出队)。PHP中可通过数组或链表实现。

使用数组实现队列

PHP数组天然支持队列操作,结合array_pusharray_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();

链表实现队列(自定义类)

通过节点类手动实现链表式队列:

用PHP实现队列

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的派生类实现同步控制。

标签: 队列PHP
分享给朋友:

相关文章

php实现一个双向队列

php实现一个双向队列

PHP 实现双向队列 双向队列(Deque)是一种允许在队列两端进行插入和删除操作的线性数据结构。PHP 可以通过数组或 SplDoublyLinkedList 类实现双向队列。 使用数组实现双向队…

php队列实现

php队列实现

PHP 队列实现方法 PHP 队列实现可以通过多种方式完成,以下是几种常见的方法: 使用数据库实现队列 创建数据库表存储队列任务,包含字段如 id, payload, status, create…

php 实现消息队列

php 实现消息队列

PHP 实现消息队列的方法 使用 Redis 实现消息队列 Redis 的 List 结构可以用于实现简单的消息队列。通过 LPUSH 和 RPOP 命令可以实现先进先出的队列。 $redis =…

PHP接口防重推荐实现

PHP接口防重推荐实现

防重实现方法 使用唯一请求标识符(UUID或业务ID)作为防重依据,客户端每次请求生成唯一标识,服务端校验该标识是否已处理过。适合短时间内的重复请求拦截。 // 客户端生成唯一标识 $request…

PHP实现numpy

PHP实现numpy

在PHP中实现类似NumPy的功能,可以通过结合PHP的数组操作、扩展库或第三方工具来模拟部分功能。以下是几种常见方法: 使用PHP数组和内置函数 PHP的数组支持多维操作,结合内置数学函数可实现基…

PHP实现OCR

PHP实现OCR

PHP实现OCR的方法 使用PHP实现OCR(光学字符识别)可以通过多种方式完成,以下为几种常见方法: 使用Tesseract OCR Tesseract是一个开源的OCR引擎,支持多种语言。可以通…