У меня есть объект $ 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 был неполным – теперь, когда он стоит, они идентичны.