Fabien Potencier's Blog: Iterator or IteratorAggregate?
Note: This article was originally published at PHPDeveloper on 25 June 2010.
If you have ever used iterators in your code, you have probably implemented the Iterator interface. Objects of a class that implements Iterator can be iterated over with the foreach loop. [...] The IteratorAggregate interface is quite similar [to Iterator] (both interfaces implement Traversable) but creates an external Iterator. But when the iterator is based on an array, creating an external Iterator for this array gives you a more concise and more readable code.
His example code shows how, in implementing and IteratorAggregate, you can grab the instance of the Iterator even if it's based on an array.