(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SplPriorityQueue::compare — Сравнивает приоритеты для корректного помещения элементов в очередь
Сравнивает priority1 с priority2.
priority1Приоритет первого узла.
priority2Приоритет второго узла.
Результат сравнения, положительное число, когда priority1
больше priority2, 0 если они равны, и отрицательное число
в остальных случаях.
Замечание:
При добавлении нескольких элементов с одинаковым приоритетом точный порядок следования этих элементов в очереди не определён.
At this time, the documentation sais "Note: Multiple elements with the same priority will get dequeued in no particular order."
If you need elements of equal priority to maintain insertion order, you can use something like:
<?php
class StablePriorityQueue extends SplPriorityQueue {
protected $serial = PHP_INT_MAX;
public function insert($value, $priority) {
parent::insert($value, array($priority, $this->serial--));
}
}
?>