无限极分类的解决思路很简单,关键是有两点: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 />';
}
复制代码
实现的效果以下 数组