PHP Conference Nagoya 2025

SplPriorityQueue::compare

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SplPriorityQueue::compareComparar las prioridades con el fin de colocar los elementos correctamente en el montón, mientras que tamizar arriba

Descripción

public SplPriorityQueue::compare(mixed $priority1, mixed $priority2): int

Compare priority1 con priority2.

Parámetros

priority1

La prioridad del primer nodo que se compara.

priority2

La prioridad del segundo nodo que se compara.

Valores devueltos

Resultados de la comparación, entero positivo si priority1es mayor que priority2 , O si son iguales, entero negativo lo contrario.

Nota:

Varios elementos con la misma prioridad que se quita de la cola sin ningún orden en particular.

add a note

User Contributed Notes 2 notes

up
17
Anonymous
15 years ago
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--));
}
}

?>
up
0
Anonymous
1 year ago
To create a min-heap priority queue, and have extract() give you the lowest priority:

class MinPriorityQueue extends SplPriorityQueue {
public function compare($priority1, $priority2) {
if ($priority1 === $priority2) return 0;
return $priority1 > $priority2 ? 1 : -1;
}
}
To Top