0

我有一个函数 - 基于父子 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)是静态进行的。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

该数据集的级别较少,但仅用于演示。

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

4

3 回答 3

6

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

我猜你的意思是:

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

或类似的东西..从您的问题中无法判断结果应该如何。

于 2013-09-15T09:57:02.820 回答
3

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

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

$aResult = array_merge($aResult, ClassName::ThisFunction($oRow->Id, $aResult));
于 2013-09-15T09:57:55.037 回答
2

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

$aResult[] = ClassName::ThisFunction($oRow->Id, $aResult);
于 2013-09-15T09:57:14.913 回答