温馨提示:QQ登录和微信登录将于2023年7月15日下线,为了不影响你的正常使用,请尽快绑定邮箱,使用邮箱登录。操作方法:登录后点击右上角【会员中心】,再点击左边的【绑定邮箱】。

你好,欢迎来到js代码网。

微信登录邮箱登录

首页>编程语言> PHP通过递归调用实现无限级分类代码示例

PHP通过递归调用实现无限级分类代码示例

  • 分类:编程语言
  • 时间:2022-05-10
  • 阅读:1186

本篇文章给大家带来的内容是关于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相关视频教程推荐

https://www.jsdaima.com/keyword/6.html

相关文章