diff options
Diffstat (limited to 'classes/IsisValueIterator.php')
| -rw-r--r-- | classes/IsisValueIterator.php | 73 | 
1 files changed, 73 insertions, 0 deletions
| diff --git a/classes/IsisValueIterator.php b/classes/IsisValueIterator.php new file mode 100644 index 0000000..04b3d92 --- /dev/null +++ b/classes/IsisValueIterator.php @@ -0,0 +1,73 @@ +<?php + +/** + * Isis value iterator. Iterates over all values for + * each result row. + */ +class IsisValueIterator implements Iterator +{ +  private $keys; +  private $valueset; +  private $row    = 0; +  private $rows   = 0; +  private $value  = 0; +  private $values = 0; + +  /** +   * Constructor. +   * +   * @param $class +   *   Instance of IsisConnector or child class. +   * +   * @param $field +   *   Field to iterate over. +   */  +  public function __construct($class, $field) { +    $this->rows     = $class->getRows($field); +    $this->valueset = $class->getValues($field); +    $this->keys     = array_keys($this->valueset); +    $this->values   = count($this->keys); +  } + +  /** +   * Rewind the Iterator to the first element. +   */ +  function rewind() { +    $this->row   = 0; +    $this->value = 0; +  } + +  /** +   * Return the key of the current element. +   */ +  function key() { +    return $this->row; +  } + +  /** +   * Return the current element. +   */ +  function current() { +    return $this->valueset[$this->keys[$this->value]]; +  } + +  /** +   * Move forward to next element. +   */ +  function next() { +    if ($this->value >= $this->values) { +      $this->value = 0; +      ++$this->row; +    } +    else { +      ++$this->value; +    } +  } + +  /** +   * Check if there is a current element after calls to rewind() or next(). +   */ +  function valid() { +    return $this->row <= $this->rows; +  }   +} | 
