PHP递归遍历对象树

PHP递归遍历对象树,php,recursion,Php,Recursion,我有一个$branch对象,它可以包含其他$branch对象: $branch->children(); 他们每个人小时候都能吃到10美元的苹果 $branch->apples(); 如何递归地从$branch收集所有$apple function collectApples($branch){ $apples = array(); ? return $apples; } 使用以下方法收集特定分支的所有苹果: @TimCooper的回答只会让你得到第一

我有一个$branch对象,它可以包含其他$branch对象:

$branch->children(); 
他们每个人小时候都能吃到10美元的苹果

$branch->apples();
如何递归地从$branch收集所有$apple

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

使用以下方法收集特定分支的所有苹果:

@TimCooper的回答只会让你得到第一代的孩子,而对他的回答稍加修改就会让你得到所有孩子和孩子的孩子的苹果(根据我对这个问题的理解,这就是我理解你需要的东西)

您可以在此处查看样本:


编辑说明:在撰写此答案时@TimCooper的答案不完整-现在看来它们是相同的。

寻找“教科书”-关于如何遍历树的示例。$brach和Object是吗?如何获取其他分支以及如何获取苹果?查看PHP的SPL迭代器和数组_merge _recursive.Tree Traversal->是否应该将
$child->Apples()
更改为
collectApples($child)
以使其递归工作?这与我的代码完全相同,不是吗?@TimCooper这不是我开始研究这个问题的时候——现在你已经纠正了你的错误。不幸的是,当你写答案时,编辑不会提醒你。为了澄清,我的答案已经更新,以反映这一事件。
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;
}