2013-05-19 39 views
0

我有一个拥有类别名称的数据库。这些列是ID | CategoryName | ParentID。我使用CodeIgniter模型中的row_array(),并且我想为该行数组添加一个级别密钥。我有一个递归计算所有类别级别的帮助函数。我在下面的代码段写道,辅助函数:计算Treversal树项目级别

function treegenerate($arrs, $parent_id=0, $level=0) { 
    foreach($arrs as $arr){ 
     if($arr["CategoryParent"]!=0){ 
      $level+=1; 
     } 
     $arr["Level"] = $level; 
     treegenerate($arrs,$arr["CategoryParent"],$level); 
    } 
    return $arrs; 
} 

但它给出了错误:“用尽33554432个字节允许内存大小(试图分配523800个字节)”。我该如何解决这个问题?

回答

0

只是一些想法不知道你的代码:

  • 是否有可能增加从后备箱启动级密钥?可以为你节省一些重复。
  • 你能移动treegenerate之外的foreach吗?

像:

function treegenerate($arr,$level=0) { 
     if($arr["CategoryParent"]!=0){ 
      $level +=1; 
     } 
     else return $level; 

    } 
    treegenerate($arr["CategoryParent"],$level);; 
} 

foreach ($arrs as $arr) $arr['level'] = treegenerate($arr); 
+0

它不能工作,因为我只返回级别我怎么能知道类别名称和ID等,将它应用到外面的foreach重要?我试过了,但它不起作用 –

+0

好像你在你的树的每个层次横跨整个$ arrs数组多次。每次您进行新的treegenerate函数调用时。这会让你的记忆非常快。 – ACNB

+0

我该怎么办?那么如何计算级别? –