1

我在 php CodeIgniter 中做一个项目,它有一个可以保存所有 attributes_values 的表,它的设计使其可以在同一个 tbl 中拥有它的孩子。数据库结构是

fld_id   fld_value    fld_attribute_id    fld_parent_id
   1       att-1           2                      0
   2       att-2           2                      0
   3       att-1_1         2                      1
   4       att-1_2         2                      1
   5       att-1_1_1       2                      3

上面的 att-1 是任何属性的属性值,它有两个子 att-1_1 和 att-1_2,父 id 为 1。att-1_1 也有其​​子 att-1_1_1,parent_id 为 3。 fld_parent_id 是同一张表并表示其子表。现在我想像这样在树结构中显示它

Level1    level2    level3 ..... level n
att-1
   +------att-1_1
   |         +------att-1_1_1
   +------att-1_2
att-2

这种树结构可以变化到 n 级。具有父 ID 的属性值位于第一级,我从第一级提取值现在我必须检查其子级,以及它是否有更多子级并如上显示其子级。我使用了一个助手并且厌倦了使其递归,但它没有发生。那么我怎么能这样做:代码如下

foreach($attributes_values->result() as $attribute_values){
                if($attribute_values->fld_parent_id==0 && $attribute_values->fld_attribute_id==$attribute->fld_id){
                    echo $attribute_values->fld_value.'<br/>';
                    $children = get_children_by_par_id($attribute_values->fld_id); //helper function
                    echo '<pre>';
                    print_r($children);
                    echo '</pre>';
                }
            }

帮助代码如下:

function get_children_by_par_id($id){ //parent id
    $children = get_children($id);
    if($children->num_rows()!=0){
        foreach($children->result() as $child){
            get_children_by_par_id($child->fld_id);
            return $child;
        }
    }
}
function get_children($id){
    $CI = get_instance();
    $CI->db->where('fld_parent_id',$id);
    return $CI->db->get('tbl_attribute_values');
}

请帮我...............

4

2 回答 2

1

递归的关键是“无休止”的调用。这可以通过一个调用它自己的函数来完成。

所以

function get_children($parent_id)
{
    // database retrieve all stuff with the parent id.
    $children = Array();

    foreach($results as $result)
    {
        $result['children'] = get_children($result['id']);
        $children[] = $result;
    }
    return $children;
}
于 2013-04-30T09:34:11.480 回答
0

或者使用 PHP 已经内置的 SPL 库PHP 递归迭代器

于 2013-04-30T09:36:47.713 回答