public function remove($value) { $new_queue = new self(); $new_queue->setExtractFlags(SplPriorityQueue::EXTR_BOTH); $this->setExtractFlags(SplPriorityQueue::EXTR_BOTH); // Since there isn't a remove method on the SplPriorityQueue class, I have to do it myself. // I'm using a temporary queue to hold everything except what I want to remove, then I insert it back into $this. // (remember that items are extracted when iterated) foreach ($this as $entry) { if ($value == $entry['data']) { continue; } $new_queue->insert($entry['data'], $entry['priority']); } foreach ($new_queue as $entry) { $this->insert($entry['data'], $entry['priority']); } $this->setExtractFlags(SplPriorityQueue::EXTR_DATA); }