PHP - 从递归函数返回数组时出错

时间:2010-08-14 12:11:59

标签: php recursion

经过两个小时的头部刮擦和谷歌搜索 - 我被困住了!

根据标题,我正在尝试返回一个在函数循环时构建的数组。我想只返回else上的数组变量,但它不会合作。它只是从函数返回空白,但是在else中我可以print_r它并按预期显示。它只是不会在$ open_array变量中返回数组。任何想法(或滥用)都将非常感激!

function find_parent($number, $open = false) {
   if(isset($other_variable[$number])) {
        foreach($other_variable[$number] as $val) {
           $open[$val->id] = [$val->id;
           $open = find_parent([$val->id, $open);

        }
   }
   else {
    return $open;
   }
}

$open_array = find_parent($number);
print_r($open_array);

1 个答案:

答案 0 :(得分:3)

在“then”部分中,您指定为$ open,但之后永远不会返回该值。所以你不能期望得到一些东西,除非你进入其他部分,但那时它是一个未更改的版本。

所以这就是我要做的事情:我会使用一个版本而不会返回$ open。 在调用函数之前初始化$ open。 传下去。 然后在必要时修改它。

没有理由真正返回这个$ open值,因为你无论如何都是通过引用传递它,即它应该总是与你操作的对象相同(在那些情况下它不是,它可能是一个错误)。

这样,您可以专注于调用和返回的流逻辑,并确保始终与同一数据结构进行通信。

<强>更新

function find_parent($number, $open = false) { 
   if(isset($other_variable[$number])) { 
        foreach($other_variable[$number] as $val) { 
           $open[$val->id] = [$val->id; 
           $open = find_parent([$val->id, $open); 
           return $open; // INSERTED
        } 
   } 
   else { 
    return $open; 
   } 
}