如果您正在迭代一个多维对象数组,您可能会倾向于在 RecursiveIteratorIterator 中使用 RecursiveArrayIterator。如果您这样做,很可能会得到令人费解的结果。这是因为 RecursiveArrayIterator 将所有对象都视为具有子项,并尝试递归进入它们。但是,如果您希望您的 RecursiveIteratorIterator 返回多维数组中的对象,那么您不需要默认设置 LEAVES_ONLY,因为没有任何对象可以是叶子(= 没有子项)。
解决方案是扩展 RecursiveArrayIterator 类并适当地重写 hasChildren 方法。类似下面的代码可能适用:
<?php
class RecursiveArrayOnlyIterator extends RecursiveArrayIterator {
public function hasChildren() {
return is_array($this->current());
}
}
?>
当然,这个简单的例子也不会递归进入 ArrayObjects!