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);
 }