首页>编程语言> PHP通过递归调用实现无限级分类代码示例
PHP通过递归调用实现无限级分类代码示例
- 分类:编程语言
- 时间:2022-05-10
- 阅读:964
本篇文章给大家带来的内容是关于php实现无限极分类的方法:递归方法。面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个pid字段用来区别自己所属的分类。
示例代码如下:
<?php $array = array( array('id' => 1, 'pid' => 0, 'name' => '广西壮族自治区'), array('id' => 2, 'pid' => 0, 'name' => '广东省'), array('id' => 3, 'pid' => 1, 'name' => '南宁市'), array('id' => 4, 'pid' => 2, 'name' => '广州市'), array('id' => 5, 'pid' => 2, 'name' => '深圳市'), array('id' => 6, 'pid' => 3, 'name' => '青秀区'), array('id' => 7, 'pid' => 3, 'name' => '西乡塘区'), array('id' => 8, 'pid' => 4, 'name' => '白云区'), array('id' => 9, 'pid' => 5, 'name' => '南山区'), array('id' => 10, 'pid' => 6, 'name' => '南湖公园'), array('id' => 11, 'pid' => 7, 'name' => '相思湖公园'), array('id' => 12, 'pid' => 7, 'name' => '美丽南方'), array('id' => 13, 'pid' => 9, 'name' => '世界之窗') ); /** * 递归实现无限极分类 * @param $array 分类数据 * @param $pid 父ID * @param $level 分类级别 * @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进 */ function getTree($array, $pid =0, $level = 0){ //声明静态数组,避免递归调用时,多次声明导致数组覆盖 static $list = []; foreach ($array as $key => $value){ //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点 if ($value['pid'] == $pid){ //父节点为根节点的节点,级别为0,也就是第一级 $value['level'] = $level; //把数组放到list中 $list[] = $value; //把这个节点从数组中移除,减少后续递归消耗 unset($array[$key]); //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1 getTree($array, $value['id'], $level+1); } } return $list; } /* * 获得递归完的数据,遍历生成分类 */ $array = getTree($array); //处理样式,进行分级 foreach($array as $value){ echo str_repeat('--', $value['level']), $value['name'].'<br />'; } ?>
代码运行结果如下:
广西壮族自治区
--南宁市
----青秀区
------南湖公园
----西乡塘区
------相思湖公园
------美丽南方
广东省
--广州市
----白云区
--深圳市
----南山区
------世界之窗
PHP相关视频教程推荐