PHP参数中带有数组的递归函数

时间:2014-01-14 19:26:11

标签: php function recursion

我正在尝试在PHP中使用递归函数但它失败并出现“致命错误:允许的内存大小为134217728字节耗尽”。

为什么这不起作用?

    $atest = array();
    $atest = $this->resolveCategories(3,$atest);
    var_dump($atest);

递归函数:

 private function resolveCategories($iCategoryId,$aCategories){
    $oCategory = CategoryQuery::create()->findOneById($iCategoryId);
    if ($oCategory->getParentId() != null){
        array_push($aCategories,$oCategory->getName());
        $this->resolveCategories($iCategoryId,$aCategories);
    }
    return $aCategories;
}

4 个答案:

答案 0 :(得分:2)

我想你打算打电话

$this->resolveCategories($oCategory->getParentId(), $aCategories);

内部,而不是

$this->resolveCategories($iCategoryId, $aCategories);

答案 1 :(得分:1)

您的功能如何知道何时停止?您只是反复使用相同的参数调用相同的函数。你创造了一个无限循环。

private function resolveCategories($iCategoryId,$aCategories){
    // code...
    $this->resolveCategories($iCategoryId,$aCategories);
    // code...
}

你永远不会改变$iCategoryId参数,所以你只是不断地一遍又一遍地获得同一行(恰好有一个父亲)。

也许你想要:

$this->resolveCategories($iCategoryId-1, $aCategories);

还是什么?

答案 2 :(得分:0)

对于递归函数,总是需要一个break语句,它通常是一个IF语句,它将在迭代时返回false。 通常,您可以使用$ depth变量并确定递归函数的深度!

答案 3 :(得分:0)

一般来说,我不明白你的算法是如何工作的。当您继续传递原始数组时,似乎您的数组将以递归方式增长(加上项目推送到递归调用。