PHP实现无限级分类–递归

建一个数组类比数据库的表做demo

    $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' => 4, 'name' => '望京'),
        array('id' => 7, 'pid' => 4, 'name' => '酒仙桥'),
        array('id' => 8, 'pid' => 3, 'name' => '永年区'),
        array('id' => 9, 'pid' => 1, '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’].’
    ‘;
    }

“PHP实现无限级分类–递归”的2个回复

  1. 阿难,幻想游戏网站,血腥大地游戏网站坏了,请看下什么问题,万分感谢,找这个游戏很久了,发现网站坏了后只看到了你的网站信息,谢谢!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注