PHP实现无限极分类

无限极分类的解决思路很简单,关键是有两点:php

  • 递归算法
  • 定义一个静态变量来保存数组

代码部分算法

<?php

$array = [
    ['id' => 1, 'pid' => 0, 'name' => '广东省'],
    ['id' => 2, 'pid' => 0, 'name' => '广西省'],
    ['id' => 3, 'pid' => 1, 'name' => '广州市'],
    ['id' => 4, 'pid' => 1, 'name' => '茂名市'],
    ['id' => 5, 'pid' => 1, 'name' => '清远市'],
    ['id' => 6, 'pid' => 4, 'name' => '高州'],
    ['id' => 7, 'pid' => 4, 'name' => '化州'],
    ['id' => 8, 'pid' => 4, 'name' => '信宜'],
    ['id' => 9, 'pid' => 2, 'name' => '南宁市'],
];


/**
 * 递归实现无限极分类
 * @param $array 分类数据
 * @param $pid 父级id
 * @param $level 分类级别,用来显示格式用的
 * @return $list 整理好分类的数组
 */

function getTree($array, $pid = 0, $level = 0)
{

    //声明静态数组,避免递归调用时,屡次声明致使数组覆盖
    static $list = [];
    foreach ($array as $key => $value) {
        if ($value['pid'] == $pid) {
            $value['level'] = $level;
            $list[]         = $value;
            unset($array[$key]);
            getTree($array, $value['id'], $level + 1);
        }
    }

    return $list;
}

/*
 * 得到递归完的数据,遍历生成分类
 */
$array = getTree($array);

foreach ($array as $value) {
    echo str_repeat('--', $value['level']), $value['name'].'<br />';
}
复制代码

实现的效果以下 数组

无限极分类
相关文章
相关标签/搜索