🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### 引用算法 由于众所周知的原因,递归对资源的消耗是非常大的,实际执行起来效率也很低,所以有了下面的通过引用算法 ~~~ /**  * 无限极分类(引用方式)  *@param  array $data需要分类的数组  *@return array 返回一个已经无限极分类完成的数组  */ function getTree($data) {     $items = array();          //构建一个新的数组 新数组的key值是自己的主键id值(我这里表的主键是cat_id)     //为何要构建这样一个数组 这就是和下面第二个foreach有关了,看了代码后就会明白何为巧妙引用了     foreach($data as $v)     {         $items[$v['cat_id']] = $v;     }     $tree = array();     //将数据进行无限极分类       foreach($items as $key => $val)     {         if(isset($items[$val['parent_id']]))         {             //关键是看这个判断,是顶级分类就给$tree,不是的话继续拼凑子分类(结合上述&用法)             $items[ $val['parent_id'] ] ['child'] [] = &$items[$key];         }         else         {             $tree[] = &$items[$key];         }     }     //返回无限极分类后的数据     return $tree; } ~~~ 上面代码中第一个foreach之后 $items数组变成如下结构: ~~~ array (size=6)   7 =>      array (size=4)       'cat_id' => int 7       'cname' => string 'php' (length=3)       'is_show' => int 1       'parent_id' => int 80   6 =>      array (size=4)       'cat_id' => int 6       'cname' => string 'mysql' (length=5)       'is_show' => int 1       'parent_id' => int 80   74 =>      array (size=4)       'cat_id' => int 74       'cname' => string 'Linux' (length=5)       'is_show' => int 1       'parent_id' => int 80   80 =>      array (size=4)       'cat_id' => int 80       'cname' => string '软件开发' (length=12)       'is_show' => int 1       'parent_id' => int 0   87 =>      array (size=4)       'cat_id' => int 87       'cname' => string '生活随笔' (length=12)       'is_show' => int 1       'parent_id' => int 0   94 =>      array (size=4)       'cat_id' => int 94       'cname' => string '邻居' (length=6)       'is_show' => int 1       'parent_id' => int 0 ~~~ 第二个foreach之后 $tree数组变成如下结构: ~~~ array (size=3)   0 =>      array (size=5)       'cat_id' => int 80       'cname' => string '软件开发' (length=12)       'is_show' => int 1       'parent_id' => int 0       'child' =>          array (size=3)           0 =>              array (size=4)               'cat_id' => int 7               'cname' => string 'php' (length=3)               'is_show' => int 1               'parent_id' => int 80           1 =>              array (size=4)               'cat_id' => int 6               'cname' => string 'mysql' (length=5)               'is_show' => int 1               'parent_id' => int 80           2 =>              array (size=4)               'cat_id' => int 74               'cname' => string 'Linux' (length=5)               'is_show' => int 1               'parent_id' => int 80   1 =>      array (size=4)       'cat_id' => int 87       'cname' => string '生活随笔' (length=12)       'is_show' => int 1       'parent_id' => int 0   2 =>      array (size=4)       'cat_id' => int 94       'cname' => string '邻居' (length=6)       'is_show' => int 1       'parent_id' => int 0 ~~~