当前位置:首页 > PHP

php 队列实现

2026-02-14 12:01:11PHP

队列数据结构基础

队列是一种先进先出(FIFO)的线性数据结构,包含两个主要操作:入队(enqueue)在队尾添加元素,出队(dequeue)从队头移除元素。PHP中可通过数组或链表实现。

基于数组的队列实现

使用PHP数组模拟队列,需注意数组操作效率:

class ArrayQueue {
    private $queue = [];

    public function enqueue($item) {
        array_push($this->queue, $item);
    }

    public function dequeue() {
        if ($this->isEmpty()) {
            return null;
        }
        return array_shift($this->queue);
    }

    public function isEmpty() {
        return empty($this->queue);
    }

    public function size() {
        return count($this->queue);
    }
}

数组实现的array_shift操作时间复杂度为O(n),因需要重新索引剩余元素。

高效的双指针数组队列

通过维护头尾指针减少重新索引开销:

class OptimizedArrayQueue {
    private $queue = [];
    private $head = 0;
    private $tail = 0;

    public function enqueue($item) {
        $this->queue[$this->tail++] = $item;
    }

    public function dequeue() {
        if ($this->isEmpty()) {
            return null;
        }
        $item = $this->queue[$this->head];
        unset($this->queue[$this->head++]);
        return $item;
    }

    public function isEmpty() {
        return $this->head >= $this->tail;
    }
}

此实现使dequeue操作变为O(1),但可能造成内存浪费,需定期压缩数组。

链表实现队列

SplDoublyLinkedList提供高效实现:

class LinkedListQueue {
    private $list;

    public function __construct() {
        $this->list = new SplDoublyLinkedList();
    }

    public function enqueue($item) {
        $this->list->push($item);
    }

    public function dequeue() {
        return $this->list->shift();
    }

    public function isEmpty() {
        return $this->list->isEmpty();
    }
}

链表实现所有操作均为O(1)时间复杂度,适合高频队列操作场景。

php    队列实现

PHP标准库解决方案

SplQueue是标准库提供的队列实现:

$queue = new SplQueue();
$queue->enqueue('a');  // 入队
$queue->dequeue();      // 出队
$queue->isEmpty();      // 检查空队列

SplQueue继承自SplDoublyLinkedList,提供完整的队列接口。

阻塞队列实现

使用swoole或workerman实现协程阻塞队列:

$chan = new Swoole\Coroutine\Channel(10);
go(function() use ($chan) {
    $chan->push('data');
});
go(function() use ($chan) {
    $data = $chan->pop();
});

适用于需要等待队列元素的并发场景。

php    队列实现

优先级队列实现

SplPriorityQueue提供优先级队列功能:

$pq = new SplPriorityQueue();
$pq->insert('task1', 3);
$pq->insert('task2', 1);
$pq->extract(); // 返回优先级最高的'task1'

通过比较器可实现复杂优先级逻辑。

持久化队列方案

使用数据库或Redis实现持久化:

// Redis实现示例
$redis = new Redis();
$redis->connect('127.0.0.1');
$redis->rPush('queue', 'item1');
$item = $redis->lPop('queue');

适合需要消息持久化的分布式系统场景。

性能优化建议

高频队列操作场景应避免使用纯数组实现,优先考虑SplQueue或链表结构。对于百万级数据量,需评估内存使用情况,必要时采用分块存储策略。

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

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'loca…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…