Collections with SPL
Priority Queue
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
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";
$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
$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
$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