PHP简易无限级分类工具类
无限级分类在我们开发过程中应该是经常遇到的,今天记录下自己通过引用传值的方式来实现无限级分类:
工具类
<?php
namespace App\Utils;
class CategoryUtil
{
/**
* 数组无限极分类
* @param array $array
* @param string $primary_key
* @param string $parent_key
* @param string $childrenName
* @return array
*/
public static function generateTree(array $array, string $primary_key = 'id', string $parent_key = 'pid', string $childrenName = 'children'): array
{
//构造数据
$items = [];
foreach ($array as $row) {
$row = (array)$row;
$items[$row[$primary_key]] = $row;
}
//遍历数据 生成树状结构
$tree = [];
foreach ($items as $key => $item) {
if (isset($items[$item[$parent_key]])) {
$items[$item[$parent_key]][$childrenName][] = &$items[$key];
} else {
$tree[] = &$items[$key];
}
}
return $tree;
}
}
工具说明
变量 | 类型 | 说明 |
array | 数组 | 传入数据结构,用来重构数据 |
primary_key | 字符串 | 传入主键"主ID",用来给PID做主键递归 |
parent_key | 字符串 | 传入副键,"副PID",用来寻找主键ID做递归 |
childrenName | 字符串 | 传入递归分类层键名 |
使用工具
- 在PHP项目中引入该工具类
- 调用generateTree方法
- 准备数组结构
<?php
$menu = [
[
"id" => 1,
"name" => "[1]主菜单",
"pid" => 0,
],
[
"id" => 2,
"name" => "二级菜单",
"pid" => 1,
],
[
"id" => 3,
"name" => "三级菜单",
"pid" => 2,
]
];
?>
调用Category工具类(传入数组结构)
<?php
$arr = CategoryUtil::generateTree($menu);
?>
数据结果
Array
(
[0] => Array
(
[id] => 1
[name] => [1]主菜单
[pid] => 0
[children] => Array
(
[0] => Array
(
[id] => 2
[name] => 二级菜单
[pid] => 1
[children] => Array
(
[0] => Array
(
[id] => 3
[name] => 三级菜单
[pid] => 2
)
)
)
)
)
)