无限级分类的一种实现方式
Posted niuben
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无限级分类的一种实现方式相关的知识,希望对你有一定的参考价值。
list返回子孙树列表
1 /**
2 * * list返回子孙树
3 * @param array $list 原始列表
4 * @param int $parentId 父id
5 * @param int $level 几级子孙
6 * @param string $space 空格占位
7 * @date:2019.06.20
8 * @return array
9 */
10 function treeList($list, $parentId = 0, $level = 0, $space = ‘ ‘)
11
12 static $bk = array();
13 foreach ($list as $each)
14
15 if ($each[‘parent_id‘] == $parentId)
16
17 $each[‘level‘] = $level;
18 $each[‘show‘] = str_repeat($space, $level) . $each[‘name‘];
19 $bk[$each[‘id‘]] = $each;
20 treeList($list, $each[‘id‘], $level + 1, $space);//子孙紧跟在自己后面
21
22
23 return $bk;
24
list返回子孙树数组
1 /**
2 * * list返回子孙树
3 * @param array $list 原始列表
4 * @param int $parentId 父id
5 * @param int $level 几级子孙
6 * @param string $space 空格占位
7 * @date:2019.06.20
8 * @return array
9 */
10 function treeArr($list, $parentId = 0, $level = 0, $space = ‘ ‘)
11
12 $bk = array();
13 foreach ($list as $each)
14
15 if ($each[‘parent_id‘] == $parentId)
16
17 $each[‘level‘] = $level;
18 $each[‘show‘] = str_repeat($space, $level) . $each[‘name‘];
19 $each[‘sonArr‘] = treeArr($list, $each[‘id‘], $level + 1, $space);
20 $bk[$each[‘id‘]] = $each;
21
22
23 return $bk;
24
如果只需要所有层级名称
/**
* 获取所有层级名列表
* @date:2019.06.20
* @return array
*/
function getFulNameList()
$listRaw = getList();
$list = array();
//一些处理
foreach ($listRaw as $each)
$list[$each[‘id‘]] = iconvArray($each, ‘GBK‘, ‘UTF-8‘);//GBK->UTF-8
//加所有层级名
foreach ($list as $id => $each)
$fulName = $list[‘name‘];
$parentId = $each[‘parent_id‘];
while ($parentId != 0 && $list[$parentId][‘parent_id‘] != 0)
$fulName = $list[$parentId][‘name‘].‘_‘.$fulName;
$parentId = $list[$parentId][‘parent_id‘];
$list[$id][‘fulName‘] = $fulName;
return $list;
//获取所有子孙
1 function getSpringId($selfId, $list)
2
3 $springIdArr = array();
4 $parentIdArr = array($selfId => $selfId);
5 do
6
7 $newSonArr = array();
8 foreach ($list as $each)
9
10 if (isset($parentIdArr[$each[‘parent_id‘]]))
11
12 $springIdArr[$each[‘id‘]] = $each[‘id‘];
13 $newSonArr[$each[‘id‘]] = $each[‘id‘];
14
15
16 $parentIdArr = $newSonArr;//新一辈父
17 while (count($parentIdArr) > 0);
18
19 return $springIdArr;
20
以上是关于无限级分类的一种实现方式的主要内容,如果未能解决你的问题,请参考以下文章