我正在尝试在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;
}
答案 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)
一般来说,我不明白你的算法是如何工作的。当您继续传递原始数组时,似乎您的数组将以递归方式增长(加上项目推送到递归调用。