北京网帮你
PHP无限级分类实现(递归+非递归)
时间:2018-04-19 23:28:05 浏览:200
<?php  
2    /**
3     * Created by PhpStorm.
4     * User: qishou
5     * Date: 15-8-2
6     * Time: 上午12:00
7     */  
8    //准备数组,代替从数据库中检索出的数据(共有三个必须字段id,name,pid)  
9    header("content-type:text/html;charset=utf-8");  
10    $categories = array(  
11        array('id'=>1,'name'=>'电脑','pid'=>0),  
12        array('id'=>2,'name'=>'手机','pid'=>0),  
13        array('id'=>3,'name'=>'笔记本','pid'=>1),  
14        array('id'=>4,'name'=>'台式机','pid'=>1),  
15        array('id'=>5,'name'=>'智能机','pid'=>2),  
16        array('id'=>6,'name'=>'功能机','pid'=>2),  
17        array('id'=>7,'name'=>'超级本','pid'=>3),  
18        array('id'=>8,'name'=>'游戏本','pid'=>3),  
19    );  
20      
21    /*======================非递归实现========================*/  
22    $tree = array();  
23    //第一步,将分类id作为数组key,并创建children单元  
24    foreach($categories as $category){  
25        $tree[$category['id']] = $category;  
26        $tree[$category['id']]['children'] = array();  
27    }  
28    //第二步,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。  
29    foreach($tree as $key=>$item){  
30        if($item['pid'] != 0){  
31            $tree[$item['pid']]['children'][] = &$tree[$key];//注意:此处必须传引用否则结果不对  
32            if($tree[$key]['children'] == null){  
33                unset($tree[$key]['children']); //如果children为空,则删除该children元素(可选)  
34            }  
35        }  
36    }  
37    ////第三步,删除无用的非根节点数据  
38    foreach($tree as $key=>$category){  
39        if($category['pid'] != 0){  
40            unset($tree[$key]);  
41        }  
42    }  
43      
44    print_r($tree);  
45      
46    /*======================递归实现========================*/  
47    $tree = $categories;  
48    function get_attr($a,$pid){  
49        $tree = array();                                //每次都声明一个新数组用来放子元素  
50        foreach($a as $v){  
51            if($v['pid'] == $pid){                      //匹配子记录  
52                $v['children'] = get_attr($a,$v['id']); //递归获取子记录  
53                if($v['children'] == null){  
54                    unset($v['children']);             //如果子元素为空则unset()进行删除,说明已经到该分支的最后一个元素了(可选)  
55                }  
56                $tree[] = $v;                           //将记录存入新数组  
57            }  
58        }  
59        return $tree;                                  //返回新数组  
60    }  
61    echo "<br/><br/><br/>";  
62      
63    print_r(get_attr($tree,0));  


[上一篇] Windows 下安装 swoole 具体步骤
[下一篇] Thinkphp5小程序滑动事件加载数
Copyright 2022 © 93580.com.cn 网帮你

2022 © 版权所有 红花岗区网帮你信息技术工作室

工信部备案号:黔ICP备2024036985号-2

请使用网帮你微信扫码登录