← CodeClarityLab Home
Browse by Category
+ added · updated 7d
← Back to glossary

Queues

data_structures PHP 5.3+ Beginner

Also Known As

FIFO SplQueue dequeue circular queue

TL;DR

A FIFO (First In, First Out) data structure — the first element enqueued is the first dequeued. Used for BFS traversal, job queues, rate limiting, and buffer management.

Explanation

A queue supports enqueue (add to rear) and dequeue (remove from front), both O(1) with a doubly linked list. PHP's SplQueue implements this. Circular queues reuse space efficiently in fixed-size buffers. Priority queues extend queues by serving the highest-priority element first (SplMinHeap/SplMaxHeap). The distinction matters practically: array_shift() on a large PHP array is O(n) because it reindexes — use SplQueue for O(1) FIFO operations.

Diagram

flowchart LR
    subgraph Queue_FIFO
        ENQUEUE[enqueue - add to rear] --> REAR[REAR - newest]
        REAR --> E3Q[Element C]
        E3Q --> E2Q[Element B]
        E2Q --> FRONT[FRONT - oldest]
        FRONT --> DEQUEUE[dequeue - remove from front]
    end
    subgraph Applications
        BFS3[BFS traversal]
        JOBS[Job queue workers]
        PRINT[Print spooler]
        BUFFER[IO buffering]
    end
    subgraph PHP
        SPLQ[SplQueue O of 1 both ops]
        ARRAY_BAD[array_shift is O of n<br/>avoid for large queues]
    end
style FRONT fill:#238636,color:#fff
style SPLQ fill:#238636,color:#fff
style ARRAY_BAD fill:#f85149,color:#fff

Common Misconception

A PHP array with array_push/array_shift is an efficient queue — array_shift() reindexes every element, making it O(n); SplQueue or a linked list gives O(1) dequeue.

Why It Matters

Job queues (Redis, SQS, RabbitMQ) are real-world queues — understanding FIFO ordering explains why jobs process in submission order and why priority queues require special handling.

Common Mistakes

  • array_shift() for dequeue in a loop — O(n²) total for n dequeues; use SplQueue.
  • Treating a priority queue like a FIFO queue — priority queues are not ordered by insertion time.
  • Not handling the empty queue case — dequeue on an empty queue throws RuntimeException.
  • Using a stack (LIFO) when FIFO order is required — results processed in reverse order.

Code Examples

✗ Vulnerable
// O(n²) — array_shift reindexes entire array each call:
$queue = [];
for ($i = 0; $i < 10000; $i++) $queue[] = $i;
while ($queue) {
    $item = array_shift($queue); // O(n) per call — 10000 calls = O(n²)
    process($item);
}
✓ Fixed
// SplQueue — O(1) per operation:
$queue = new SplQueue();
for ($i = 0; $i < 10000; $i++) $queue->enqueue($i);
while (!$queue->isEmpty()) {
    $item = $queue->dequeue(); // O(1)
    process($item);
}

Added 16 Mar 2026
Edited 22 Mar 2026
Views 20
Rate this term
No ratings yet
🤖 AI Guestbook educational data only
| |
Last 30 days
0 pings W 0 pings T 0 pings F 0 pings S 1 ping S 0 pings M 1 ping T 0 pings W 1 ping T 0 pings F 0 pings S 1 ping S 0 pings M 0 pings T 0 pings W 0 pings T 0 pings F 0 pings S 1 ping S 0 pings M 0 pings T 0 pings W 0 pings T 0 pings F 0 pings S 1 ping S 0 pings M 0 pings T 0 pings W 0 pings T
No pings yet today
No pings yesterday
Amazonbot 6 Perplexity 6 Google 1 Ahrefs 1
crawler 14
DEV INTEL Tools & Severity
🟢 Low ⚙ Fix effort: Low
⚡ Quick Fix
Use SplQueue for in-memory queues (O(1) enqueue/dequeue) instead of array_shift() which is O(n) — for distributed queues use Redis lists or SQS
📦 Applies To
PHP 5.3+ web cli queue-worker
🔗 Prerequisites
🔍 Detection Hints
array_shift() as dequeue on large arrays O(n); breadth-first search using array with shift instead of SplQueue
Auto-detectable: ✗ No blackfire
⚠ Related Problems
🤖 AI Agent
Confidence: Low False Positives: High ✗ Manual fix Fix: Low Context: Function

✓ schema.org compliant