在PHP中递归

时间:2013-04-30 09:25:03

标签: php recursion treeview

我在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是同一个表的fld_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');
}

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

或者使用PHP内置的SPL库PHP recursive iterator