<?php /** * @author Evgeny Shpilevsky <evgeny@shpilevsky.com> */ class MyArrayIterator implements Iterator { /** * @var array */ protected $array = array(); /** * @param array $array */ public function __construct(array $array) { $this->array = $array; } /** * Return the current element * @link http://php.net/manual/en/iterator.current.php * @return mixed Can return any type. */ public function current() { return current($this->array); } /** * Move forward to next element * @link http://php.net/manual/en/iterator.next.php * @return void Any returned value is ignored. */ public function next() { next($this->array); } /** * Return the key of the current element * @link http://php.net/manual/en/iterator.key.php * @return mixed scalar on success, or null on failure. */ public function key() { return key($this->array); } /** * Checks if current position is valid * @link http://php.net/manual/en/iterator.valid.php * @return boolean The return value will be casted to boolean and then evaluated. * Returns true on success or false on failure. */ public function valid() { return isset($this->array[$this->key()]); } /** * Rewind the Iterator to the first element * @link http://php.net/manual/en/iterator.rewind.php * @return void Any returned value is ignored. */ public function rewind() { reset($this->array); } } class MyIteratorAggregate implements IteratorAggregate { /** * Retrieve an external iterator * @link http://php.net/manual/en/iteratoraggregate.getiterator.php * @return Traversable An instance of an object implementing <b>Iterator</b> or <b>Traversable</b> */ public function getIterator() { return new ArrayIterator([1, 2, 3, 4]); } } // Example $iterator = new MyArrayIterator([1, 2, 3, 5]); // output array var_dump(iterator_to_array($iterator)); // output all values of array foreach ($iterator as $value) { var_dump($value); } // aggregate $iteratorAggregate = new MyIteratorAggregate(); foreach($iteratorAggregate as $value) { var_dump($value); }