递归函数行为异常


Recursive function behaves unexpected

我有一个函数,其中 - 基于父子ID的 - 从数据库中检索结果。父子结构最多可以包含四个层次结构"级别",并且根据给定的方案,应从给定级别检索最深层的结果。

我有这个功能:

static public function ThisFunction($iParentId, $aResult) {
    $aRows = ClassName::GetAllByParentId($iParentId);
    for($i = 0; $i < count($aRows); $i++) { 
        $oRow = $aRows[$i];
        if($oRow->Level != 'deepest_level') {
            return ClassName::ThisFunction($oRow->Id, $aResult);
        } else { 
            $aResult[] = $oRow;
        }
    }
    return $aResult;
}

在我的框架中,数据库调用(在本例中为 ClassName 是一个Model_TableName)是静态进行的。此功能是指 - 如您所见,此函数。

结果是结果正在循环,但是当第一次$aRows迭代"deepest_level"处理了该父级的所有行时,该函数将停止。我希望该函数将返回到其递归调用并一直向下处理其他数据。

我在这个慵懒的星期天监督什么吗?提前谢谢。

编辑我已经尝试了这些建议,但我仍然坚持我最初的问题。假设我有此示例数据集:

id  parent id   level   value
-----------------------------
1   0           highest AAA
2   1           middle  BBB
3   1           middle  CCC
4   2           deepest DDD
5   3           deepest EEE
6   0           highest FFF

此数据集的级别较少,但只是为了演示。

当我在寻找最深刻的价值观时,我希望得到DDDEEE。就我而言,我只会得到DDD.另外,当我尝试合并结果时...

如果级别不是最深的,则立即从递归调用返回,并且不处理循环中的其他元素。

我猜你的意思是:

$aResult[] = ClassName::ThisFunction($oRow->Id, $aResult);

或类似的东西..从你的问题中,不可能说出结果应该是什么样子。

您永远不会合并嵌套调用的结果,而只是返回它们。尝试更改

return ClassName::ThisFunction($oRow->Id, $aResult);

$aResult = array_merge($aResult, ClassName::ThisFunction($oRow->Id, $aResult));

也许您想收集递归调用的结果?

$aResult[] = ClassName::ThisFunction($oRow->Id, $aResult);