如果您正在迭代一個多維物件陣列,您可能會想在 RecursiveIteratorIterator 中使用 RecursiveArrayIterator。如果您這樣做,您可能會得到令人困惑的結果。這是因為 RecursiveArrayIterator 將所有物件都視為具有子項,並嘗試遞迴到它們。但如果您希望 RecursiveIteratorIterator 返回多維陣列中的物件,則您不希望使用預設設定 LEAVES_ONLY,因為沒有物件可以是葉子(= 沒有子項)。
解決方案是擴展 RecursiveArrayIterator 類別並適當地覆寫 hasChildren 方法。類似以下的程式碼可能適用:
<?php
class RecursiveArrayOnlyIterator extends RecursiveArrayIterator {
public function hasChildren() {
return is_array($this->current());
}
}
?>
當然,這個簡單的例子也不會遞迴到 ArrayObjects!