【问题标题】:Calculating Treversal Tree items level计算遍历树项目级别
【发布时间】:2013-05-19 10:30:40
【问题描述】:

我有一个包含类别名称的数据库。这些列是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 字节)”。我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

    • 是否可以从主干开始添加级别键?可能会为您省去一些重复。
    • 可以将 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);
    

    【讨论】:

    • 它不能工作,因为我只返回级别我怎么知道类别名称和 ID 等。对于外部 foreach 是否重要?我试过了,但没用
    • 您似乎在树的每一层上多次遍历整个 $arrs 数组。每次进行新的 treegenerate 函数调用时。这会很快耗尽你的记忆。
    • 我该怎么办?那么如何计算关卡呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多