**算法不一定是首创,但一定是原创哈!

我自己给这个算法取个名字,叫“一致无限分类法”。。哈哈!**

30行内写个无限分类算法(非递归)_第1张图片

奉上代码:(使用的thinkphp框架)

    public function menu(){
        $data = M('menu') -> select();  //获取数据
        $data = $this -> index_to_key($data,'menu_id'); //把primary key转移到数组索引上去
        foreach($data as &$one){
            $one['children'] = $this -> search_children($one['menu_id'],$data); //查询子节点
        }
        $this -> assign('data',$data);  //前端显示
        $this -> display();

        echo '
';
        print_r($data);
    }

    //查询子节点并返回
    function search_children($id,$data){
        $children = array();
        foreach($data as $one){
            if($one['menu_pid'] == $id){
                $children[] = $one['menu_id'];
            }
        }
        return $children;
    }

    //将数据的键名提到数组索引上去
    function index_to_key($data,$main_key){
        $new_data = array();
        foreach($data as $row){
            $new_data[$row[$main_key]] = $row;
        }
        return $new_data;
    }

前端代码:

  • {$v1.menu_name}
    • {$data[$v2]['menu_name']}
      • {$data[$v3]['menu_name']}
        • {$data[$v4]['menu_name']}

效果:
30行内写个无限分类算法(非递归)_第2张图片