SplPriorityQueue extracts the item with the highest priority first.

priority order Priority queues use numeric priority instead of insertion order to choose the next item.

Priority Queue

urgent
priority_queue.php
Replay: real traced execution (multi-file project)
<?php
$urgent = 5;
$queue = new SplPriorityQueue();
$queue->insert("normal", 3);
$queue->insert("urgent", $urgent);
$picked = $queue->extract();
$left = $queue->count();

echo "urgent=" . $urgent . "\n";
echo "picked=" . $picked . "\n";
echo "left=" . $left . "\n";
<?php
$urgent = 1;
$queue = new SplPriorityQueue();
$queue->insert("normal", 3);
$queue->insert("urgent", $urgent);
$picked = $queue->extract();
$left = $queue->count();

echo "urgent=" . $urgent . "\n";
echo "picked=" . $picked . "\n";
echo "left=" . $left . "\n";
<?php
$urgent = 9;
$queue = new SplPriorityQueue();
$queue->insert("normal", 3);
$queue->insert("urgent", $urgent);
$picked = $queue->extract();
$left = $queue->count();

echo "urgent=" . $urgent . "\n";
echo "picked=" . $picked . "\n";
echo "left=" . $left . "\n";
  1. $urgent ← 5, $queue ← SplPriorityQueue, $picked ← urgent, $left ← 1

    1<?php2$urgent→ 5 = 5; //@urgent=1, 93$queue→ SplPriorityQueue = new SplPriorityQueue();4$queueSplPriorityQueue->insert("normal", 3);5$queueSplPriorityQueue->insert("urgent", $urgent5);6$picked→ urgent = $queueSplPriorityQueue->extract();7$left→ 1 = $queueSplPriorityQueue->count();89echo "urgent=" . $urgent5 . "\n";10echo "picked=" . $pickedurgent . "\n";11echo "left=" . $left1 . "\n";
    outputurgent=5
    picked=urgent
    left=1
  1. $urgent ← 1, $queue ← SplPriorityQueue, $picked ← normal, $left ← 1

    1<?php2$urgent→ 1 = 1;3$queue→ SplPriorityQueue = new SplPriorityQueue();4$queueSplPriorityQueue->insert("normal", 3);5$queueSplPriorityQueue->insert("urgent", $urgent1);6$picked→ normal = $queueSplPriorityQueue->extract();7$left→ 1 = $queueSplPriorityQueue->count();89echo "urgent=" . $urgent1 . "\n";10echo "picked=" . $pickednormal . "\n";11echo "left=" . $left1 . "\n";
    outputurgent=1
    picked=normal
    left=1
  1. $urgent ← 9, $queue ← SplPriorityQueue, $picked ← urgent, $left ← 1

    1<?php2$urgent→ 9 = 9;3$queue→ SplPriorityQueue = new SplPriorityQueue();4$queueSplPriorityQueue->insert("normal", 3);5$queueSplPriorityQueue->insert("urgent", $urgent9);6$picked→ urgent = $queueSplPriorityQueue->extract();7$left→ 1 = $queueSplPriorityQueue->count();89echo "urgent=" . $urgent9 . "\n";10echo "picked=" . $pickedurgent . "\n";11echo "left=" . $left1 . "\n";
    outputurgent=9
    picked=urgent
    left=1