30行無限の分類アルゴリズムを書く(非再帰的)

**このアルゴリズムは、必ずしも最初ではありませんが、オリジナルのハなければなりません!

私はと呼ばれるこのアルゴリズムの名前、持っている「無限の一貫性の分類を。」ハハ!**

30行無限の分類アルゴリズムを書く(非再帰的)

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 '<pre>';
        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;
    }

フロントエンドのコード:

<ul>
<foreach name="data" item="v1" key="k1">
<eq name="v1['menu_pid']" value="0">

    <li>{$v1.menu_name}</li>

    <notempty name="v1['children']">
    <ul>
    <foreach name="v1['children']" item="v2" key="k2">

        <li>{$data[$v2]['menu_name']}</li>

        <notempty name="data[$v2]['children']">
        <ul>
        <foreach name="data[$v2]['children']" item="v3" key="k3">

            <li>{$data[$v3]['menu_name']}</li>

            <notempty name="data[$v3]['children']">
            <ul>
            <volist name="data[$v3]['children']" id="v4" key="k4">
                <li>{$data[$v4]['menu_name']}</li>
            </volist>
            </ul>
            </notempty>

        </foreach>
        </ul>
        </notempty>

    </foreach>
    </ul>
    </notempty>

</eq>
</foreach>
</ul>

効果:
30行無限の分類アルゴリズムを書く(非再帰的)

おすすめ

転載: blog.51cto.com/qicaiji/2479184
おすすめ