hasChildren() works as documented here, but not as its name suggests. The method does not return whether the current entry actually *has* children. It only returns whether the element's type is one that is able to have children.This is a bit counterintuitive if you are processing empty arrays.Example:<?php$data = array( "element one" => array(true), "element two" => array(), "element three" => array(true),);$i = new RecursiveIteratorIterator(new RecursiveArrayIterator($data),RecursiveIteratorIterator::SELF_FIRST);foreach($i as $key => $value){ $type = gettype($value); $depth = $i->getDepth(); if($i->hasChildren()) { echo "$depth: $key ($type) has children\n"; } else { echo "$depth: $key ($type) has no children\n"; }}?>Result:0: element one (array) has children1: 0 (boolean) has no children0: element two (array) has children0: element three (array) has children1: 0 (boolean) has no children