ConFoo 2025

SplPriorityQueue::compare

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

SplPriorityQueue::compareCompare deux priorités

Description

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

Compare la valeur priority1 avec la valeur priority2.

Liste de paramètres

priority1

La priorité du premier nœud à comparer.

priority2

La priorité du second nœud à comparer.

Valeurs de retour

Le résultat de la comparaison ; un entier positif si la valeur priority1 est plus grande que la valeur priority2, 0 si les valeurs sont égales, et un entier négatif sinon.

Note:

Avoir plusieurs éléments avec la même priorité fera qu'ils n'auront pas d'ordre particulier.

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