翼度科技»论坛 编程开发 PHP 查看内容

PHP实现处理三级分类数据的示例代码

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
一、原始数据
  1. function getDatas(){
  2.     return [
  3.         [
  4.                 'component' => 'system',
  5.                 'redict' => '/system',
  6.                 'path' => '/system',
  7.                 'hidden' => 1,
  8.                 'name' => '系统管理',
  9.                 'children' => [
  10.                         [
  11.                                 'component' => 'user',
  12.                                 'redict' => '/user',
  13.                                 'path' => '/user',
  14.                                 'hidden' => 1,
  15.                                 'name' => '用户管理',
  16.                                 'children' => [
  17.                                         [
  18.                                                 'component' => 'user_list',
  19.                                                 'redict' => '/user_list',
  20.                                                 'path' => '/user_list',
  21.                                                 'hidden' => 1,
  22.                                                 'name' => '用户列表',
  23.                                         ],
  24.                                         [
  25.                                                 'component' => 'role',
  26.                                                 'redict' => '/user_role',
  27.                                                 'path' => '/user_role',
  28.                                                 'hidden' => 1,
  29.                                                 'name' => '角色列表',
  30.                                         ],
  31.                                         [
  32.                                                 'component' => 'perm',
  33.                                                 'redict' => '/perm',
  34.                                                 'path' => '/perm',
  35.                                                 'hidden' => 1,
  36.                                                 'name' => '权限列表',
  37.                                         ],
  38.                                 ]
  39.                         ],
  40.                         [
  41.                                 'component' => 'data',
  42.                                 'redict' => '/data',
  43.                                 'path' => '/data',
  44.                                 'hidden' => 1,
  45.                                 'name' => '数据管理',
  46.                                 'children' => [
  47.                                         [
  48.                                                 'component' => 'report',
  49.                                                 'redict' => '/report',
  50.                                                 'path' => '/report',
  51.                                                 'hidden' => 1,
  52.                                                 'name' => '分日报表',
  53.                                         ],
  54.                                         [
  55.                                                 'component' => 'hour_report',
  56.                                                 'redict' => '/hour_report',
  57.                                                 'path' => '/hour_report',
  58.                                                 'hidden' => 1,
  59.                                                 'name' => '分时报表',
  60.                                         ],
  61.                                         [
  62.                                                 'component' => 'month_report',
  63.                                                 'redict' => '/month_report',
  64.                                                 'path' => '/month_report',
  65.                                                 'hidden' => 1,
  66.                                                 'name' => '分月报表',
  67.                                         ],
  68.                                 ]
  69.                         ],
  70.                         [
  71.                                 'component' => 'resource',
  72.                                 'redict' => '/resource',
  73.                                 'path' => '/resource',
  74.                                 'hidden' => 1,
  75.                                 'name' => '资源管理',
  76.                                 'children' => [
  77.                                         [
  78.                                                 'component' => 'res_list',
  79.                                                 'redict' => '/res_list',
  80.                                                 'path' => '/res_list',
  81.                                                 'hidden' => 1,
  82.                                                 'name' => '资源列表'
  83.                                         ]
  84.                                 ]
  85.                         ]
  86.                 ]
  87.         ]
  88. ]
  89. }
复制代码
二、函数处理
  1. function deal(){
  2.         $datas = getDatas();
  3.         $level_1_tree = [];
  4.         foreach($datas as $data_level_1){
  5.             $data_level_1_arr['component'] = $data_level_1['component'];
  6.             $data_level_1_arr['redict'] = $data_level_1['redict'];
  7.             $data_level_1_arr['path'] = $data_level_1['path'];
  8.             $data_level_1_arr['meta'] = [
  9.                  'title' => $data_level_1['name'],
  10.                  'hidden' => $data_level_1['hidden']
  11.             ];
  12.             $level_2_tree = [];
  13.             if(isset($data_level_1['children']) && !empty($data_level_1['children'])) {
  14.                 foreach ($data_level_1['children'] as $data_level_2) {
  15.                     $data_level_2_arr['component'] = $data_level_2['component'];
  16.                     $data_level_2_arr['redict'] = $data_level_2['redict'];
  17.                     $data_level_2_arr['path'] = $data_level_2['path'];
  18.                     $data_level_2_arr['meta'] = [
  19.                      'title' => $data_level_2['name'],
  20.                      'hidden' => $data_level_2['hidden']
  21.                     ];
  22.                     $level_3_tree = [];
  23.                     if (isset($data_level_2['children']) && !empty($data_level_2['children'])) {
  24.                        
  25.                        foreach ($data_level_2['children'] as $data_level_3) {
  26.                             $data_level_3_arr['component'] = $data_level_3['component'];
  27.                             $data_level_3_arr['redict'] = $data_level_3['redict'];
  28.                             $data_level_3_arr['path'] = $data_level_3['path'];
  29.                             $data_level_3_arr['meta'] = [
  30.                                'title' => $data_level_3['name'],
  31.                                'hidden' => $data_level_3['hidden']
  32.                             ];
  33.                             array_push($level_3_tree, $data_level_3_arr);
  34.                             unset($data_level_3_arr);
  35.                        }
  36.                        $data_level_2_arr['children'] = $level_3_tree;
  37.                     }
  38.                     array_push($level_2_tree, $data_level_2_arr);
  39.                     unset($data_level_2_arr);
  40.                 }
  41.                 $data_level_1_arr['children'] = $level_2_tree;
  42.             }
  43.             
  44.             array_push($level_1_tree, $data_level_1_arr);
  45.             unset($data_level_1_arr);
  46.         }
  47.         print_r($level_1_tree);
  48.     }

  49.   deal();
复制代码
三、方法补充

除了上文的方法,小编还为大家整理了PHP处理三级分类数据的其他方法,希望对大家有所帮助
示例代码
  1. <?php
  2. //瞎写的
  3. // 链接数据库
  4. $link = mysqli_connect('localhost','root','root');
  5. if($link == null){
  6.   exit;
  7. }
  8. mysqli_select_db($link,'test');
  9. $link->query("SET NAMES utf8");
  10. $sql = "select * from tp_goods_categorys";
  11. $res = mysqli_query($link,$sql);
  12. while($res && $row = mysqli_fetch_assoc($res)) {
  13.   $list[] = $row;
  14. }
  15. echo '<pre>';
  16. print_r(res($list));
  17. function res($items){
  18.     $tree = array();
  19.     foreach($items as $key =>$val){
  20.             $list = explode(',',$val['categorys_path']);
  21.             switch(count($list)){
  22.                 case 1:
  23.                     $tree[$val['id']] = $val;
  24.                     break;
  25.                 case 2:
  26.                     $tree[$val['categorys_pid']]['son'][$val['id']] = $val;
  27.                     break;
  28.                 case 3:
  29.                     $tree[$list[1]]['son'][$list[2]]['son'] = $val;
  30.                     break;
  31.             }
  32.     }
  33.     return $tree;
  34. }
复制代码
  1. <?php
  2. //递归
  3. $array = array(
  4. array('id' => 1, 'pid' => 0, 'name' => '湖北省'),
  5. array('id' => 2, 'pid' => 0, 'name' => '北京市'),
  6. array('id' => 3, 'pid' => 1, 'name' => '武汉市'),
  7. array('id' => 4, 'pid' => 2, 'name' => '朝阳区'),
  8. array('id' => 5, 'pid' => 2, 'name' => '通州区'),
  9. array('id' => 6, 'pid' => 4, 'name' => '望京'),
  10. array('id' => 7, 'pid' => 4, 'name' => '酒仙桥'),
  11. array('id' => 8, 'pid' => 3, 'name' => '武昌区'),
  12. array('id' => 9, 'pid' => 1, 'name' => '武安市'),
  13. );
  14. function cation($arr,$num=0,$m=1)
  15. {
  16.     $list = [];
  17.     foreach($arr as $k=>$v){
  18.         if($v['pid'] === $num){
  19.             $v['level'] = $m;
  20.             $v['son'] = cation($arr,$v['id'],$m+1);
  21.             $list[] = $v;
  22.         }
  23.     }
  24.     return $list;
  25. }
  26. $list = cation($array);
  27. echo '<pre>';
  28. print_r($list);
  29. echo '</pre>';
复制代码
另一种需求
(重组一维数组)
  1. //    处理分类数据 栏目分级
  2.     public function allMenu($cates,$pid=0,$level=0){
  3.         static $cateArr = array();
  4.         for($i=0;$i<count($cates);$i++){
  5.             if($cates[$i]['pid']==$pid){
  6.                 $cates[$i]['level']=$level;
  7.                 $cateArr[]=$cates[$i];
  8.                 $this->allMenu($cates,$cates[$i]['id'],$level+1);
  9.             }
  10.         }
  11.         return $cateArr;
  12.     }
复制代码
到此这篇关于PHP实现处理三级分类数据的示例代码的文章就介绍到这了,更多相关PHP处理三级分类数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/program/3152716p7.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具