PHP рекурсивно пересекает дерево объектов

У меня есть объект $ branch, который может содержать другие объекты $ branch:

$branch->children(); 

У каждого из них могут быть $ яблоки в качестве детей.

 $branch->apples(); 

Как я могу собрать все $ яблоки из $ ветви рекурсивно?

 function collectApples($branch){ $apples = array(); ? return $apples; } 

Собирает все яблоки определенной ветви с помощью DFS :

 function collectApples($branch) { $apples = $branch->apples(); foreach ($branch->children() as $child) { $apples = array_merge($apples, collectApples($child)); } return $apples; } 
 function collectApples($branch) { $apples = $branch->apples(); foreach ($branch->children() as $child) $apples = array_merge($apples, collectApples($child)); return $apples; } 

@ Ответ TimCooper принесет вам только детей первого поколения, в то время как эта небольшая модификация в его ответе даст вам яблоки для всех детей и детей детей (по моему прочтению вопроса это то, что я понял, что вам нужно).

Вы можете проверить образец здесь: http://phpfiddle.org/main/code/9dk-zjc

EDIT ПРИМЕЧАНИЕ. В то время, когда этот ответ был написан, ответ TimCooper был неполным – теперь, когда он стоит, они идентичны.