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