递归函数表现出意外

Ben*_*Ben 0 php

我有一个函数 - 基于父子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;
}
Run Code Online (Sandbox Code Playgroud)

在我的框架中,数据库调用(在本例中为ClassName是Model_TableName)是静态的.ThisFunction指的是 - 正如你所看到的,这个函数.

结果是循环结果,但是当第一个$ 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
Run Code Online (Sandbox Code Playgroud)

此数据集的级别较少,但仅用于演示.

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

Kar*_*ath 6

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

我想你的意思是:

$aResult[] = ClassName::ThisFunction($oRow->Id, $aResult);
Run Code Online (Sandbox Code Playgroud)

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