1

このコードを使用して優先キューを作成しようとしていますが、どこに問題があるのか​​ わかりません。誰か私がどこで間違ったのか教えてください。

<?php

class PriorityQueue implements Iterator , Countable
{
  public function __construct() {
    $flags = self::EXTR_DATA;
    $items = array();
  }

  function compare ( mixed $priority1 , mixed $priority2 ){}
  function count (){
    return count($this->items);
  }

  function current (){
    switch ($this->flags) {
    case self::EXTR_BOTH:
      $ret = array();
      $ret['Patient'] = current($this->items);
      $ret['Priority'] = $this->key();
      break;
    case self::EXTR_DATA:
      $ret = current($this->items);
      break;
    case self::EXTR_PRIORITY:
      $ret = $this->key();
      break;
    };
    return $ret;
  }

  function extract (){
    $ret = $this->current();
    $this->next();
    return $ret;
  }

  function insert ($name,$priority){
    $patient = array();

    return $patient[$name] = $priority;
  }

  function isEmpty ()
  {
    return empty($this->items);
  }

  function  key (){
    return substr(key($this->items), 0, 9);
  }

  function next (){
    //array_shift($this->items);
    return($this->items);
    echo "<br />";
  }
  function recoverFromCorruption (){}
  function rewind (){}

  function setExtractFlags (int $flags ){
    switch ($flags) {
    case self::EXTR_BOTH:
    case self::EXTR_DATA:
    case self::EXTR_PRIORITY:
      $this->flags = $flags;
      break;
    };
  }

  function  top (){
    return $this->current();
  }

  function valid () {
    if (NULL !== key($this->items)) {
      return TRUE;
    }
    return FALSE;
  }// function valid
  /**
   * Extract the data.
   */
  const EXTR_DATA = 1;
  /**
   * Extract the priority.
   */
  const EXTR_PRIORITY = 2;
  /**
   * Extract an array containing both priority and data.
   */
  const EXTR_BOTH = 3;
};


$objPQ = new splPriorityqueue();
$objPQ->insert('Richard',9);
$objPQ->insert('paul',1);
$objPQ->insert('Ken',8);
$objPQ->insert('peter',2);
$objPQ->insert('Rick',7);
$objPQ->insert('Dan',5);



echo "PATIENTS = ".$objPQ->count()."<br />";

//mode of extraction
$objPQ->setExtractFlags(splPriorityqueue::EXTR_BOTH);

//Go to TOP
$objPQ->top();

for($i=0,$j=$objPQ->count(); $i<$j; $i++){
  //print_r($objPQ->current());

  $patients = $objPQ->current();
  foreach ($patients as $patient=>$value){
    echo $patient."<br />".$value;

    $objPQ->next();
    echo "<br />";
  }
}

?>

私は今、いくつかの奇妙な結果を得ています

data-patient Richard
priority-9
......
etc

なるような結果を出したい

Richard - 9
Ken - 8
Rick - 7
Dan - 5
Peter - 2
Paul - 1

与えられた優先順位を考慮して

4

2 に答える 2