计算遍历树项目级别

时间:2013-05-19 10:30:40

标签: php mysql codeigniter-2 hierarchy hierarchical-data

我有一个具有类别名称的数据库。列为ID | CategoryName | ParentID。我正在使用CodeIgniter模型中的row_array(),我想为该行数组添加一个关卡。我有一个辅助函数,递归计算所有类别级别。我在以下代码段中编写了帮助函数:

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字节)”。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在不知道你的代码的情况下想出一些想法:

  • 是否可以从主干开始添加关卡?可能会为你节省一些重复。
  • 你可以将foreach移到treegenerate之外吗?

像:

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);