zoukankan      html  css  js  c++  java
  • php递归获取分类结构

    商城的菜单通常都是树状结构,我们来模仿实现以下。

    原理都是相同的,所以我们来个简单点的结构就行。层级只有两层,有两大类:手机和电脑;每个大类下面分别有三个子类:

     1 //从数据库获取的分类数据(省略获取步骤)
     2 //有“手机”和“电脑”两个大类
     3 //--手机{三星Glaxy,IphoneX,华为荣耀}
     4 //--电脑{Dell,Lenovo,IBM}
     5 
     6 $data = array(
     7 
     8     array('id' => 5, 'name' => '电脑', 'pid' => 0),
     9     array('id' => 1, 'name' => '手机', 'pid' => 0),
    10     array('id' => 2, 'name' => '三星Glaxy', 'pid' => 1),
    11     array('id' => 3, 'name' => 'IphoneX', 'pid' => 1),
    12     array('id' => 4, 'name' => '华为荣耀', 'pid' => 1),
    13     array('id' => 6, 'name' => 'Dell', 'pid' => 5),
    14     array('id' => 7, 'name' => 'Lenovo', 'pid' => 5),
    15     array('id' => 8, 'name' => 'IBM', 'pid' => 5),
    16 );
    View Code

    这种查子类当然是递归走起啊,定义一个递归查询的函数:

     1 /**
     2  * 递归获取结构树
     3  * @param  array $data  数据源
     4  * @param  integer $pid 父类id
     5  * @param  integer $level 深度
     6  * @return array 组装好的树
     7  */
     8 function get_tree($data, $pid = 0, $level = 0) {
     9     static $tree = array();
    10     foreach ($data as $key => $row) {
    11         if ($row['pid'] == $pid) {
    12             $row['level'] = $level;
    13             $tree[] = $row;
    14             unset($data[$key]); //进入树结构后,接下里要查的就只是它的子类了,所以从$data中删除,减少后面查询次数
    15             get_tree($data, $row['id'], $level + 1);
    16         }
    17     }
    18     return $tree;
    19 }
    View Code

    调用函数,并输出:

    $tree = get_tree($data, 0, 0);
    var_dump($tree);

    结果:

    在用一个简单暴力的方式,呈现在页面上,感受一下:

    /**
     * 输出树结构
     * @param  array 数据源
     * @return void
     */
    function echo_tree($tree) {
        foreach ($tree as $row) {
            for ($i = $row['level']; $i > 0; $i--) {
                echo '|----';
            }
            echo $row['name'];
            echo '<br>';
        }
    }
    View Code

    结果:

  • 相关阅读:
    day39-Spring 06-Spring的AOP:带有切点的切面
    第五讲:单例模式
    day39-Spring 05-Spring的AOP:不带有切点的切面
    day39-Spring 04-CGLIB的动态代理
    day39-Spring 03-JDK的动态代理
    day39-Spring 02-AOP的概述
    第三十二讲:UML类图(下)
    ASP.NET资源大全
    ASP.NET资源大全
    ASP.NET资源大全
  • 原文地址:https://www.cnblogs.com/zjfblog/p/8888510.html
Copyright © 2011-2022 走看看