On Sun, Sep 7, 2008 at 11:05 AM, Jochem Maas <[EMAIL PROTECTED]> wrote:

> David Lidstone schreef:
>
>> Hi
>>
>> I am getting myself quite confused while trying to use SPL to recursively
>> iterate through a collection of objects, and any help would be greatly
>> appreciated!
>>
>> My collection of objects is contained in a class (which I frequently use
>> to iterate through objects stored in an array in the class), and I think my
>> hasChildren() and getChildren() methods are working ok, but I am unable to
>> make it recursive.
>>
>> I am particularly confused by where I have to use
>> RecursiveIteratorIterator (do I have to at all?),
>>
>
> something like:
>
> $c = new Categories;
> $c->loadAll();
>
> foreach (new RecursiveIteratorIterator($c) as $item)
>        var_dump($item);


make sure to pass the appropriate mode when instantiating
RecursiveIteratorIterator; the default is LEAVES_ONLY, which i presume is
not what people want in most cases.  here is the list of modes from the spl
docs,

*mode* Operation mode (one of):

   - LEAVES_ONLY only show leaves
   - SELF_FIRST show parents prior to their childs
   - CHILD_FIRST show all children prior to their parent

so, i typically use SELF_FIRST, and then Jochem's example would become,

..
foreach(new RecursiveIteratorIterator($c,
RecursiveIteratorIterator::SELF_FIRST) as $item)
..

-nathan

Reply via email to