1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- <?php
- namespace app\common\util;
- class Tree
- {
- /**
- * 示例数组
- * @var array|array[]
- */
- public array $array = [
- ['id' => 1, 'name' => 'ha1', 'parent_id' => 0],
- ['id' => 2, 'name' => 'ha2', 'parent_id' => 0],
- ['id' => 3, 'name' => 'ha3', 'parent_id' => 0],
- ['id' => 4, 'name' => 'ha4', 'parent_id' => 1],
- ['id' => 5, 'name' => 'ha5', 'parent_id' => 1],
- ['id' => 6, 'name' => 'ha6', 'parent_id' => 2],
- ];
- /**
- * 1级转1维数组无限极分类
- * @param array $array
- * @param int $parent_id
- * @return array
- */
- public function getTree(array $array, int $parent_id = 0): array
- {
- static $data = [];
- foreach ($array as $key => $value) {
- if ($value['parent_id'] == $parent_id) {
- $data[] = $value;
- unset($array[$key]);
- $this->getTree($array, $value['id']);
- }
- }
- return $data;
- }
- /**
- * 1级转2维数组数无限极分类
- * @param array $array
- * @return array
- */
- public function getTreeV2(array $array): array
- {
- $refer = [];
- $tree = [];
- foreach ($array as $key => $val) {
- $refer[$val['id']] = &$array[$key];
- $refer[$val['id']]['label'] = $val['name'];
- }
- foreach ($array as $k => $v) {
- $pid = $v['parent_id']; //获取当前分类的父级id
- if ($pid == 0) {
- $tree[] = &$array[$k]; //顶级栏目
- } else {
- if (isset($refer[$pid])) {
- $refer[$pid]['children'][] = &$array[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
- }
- }
- }
- return $tree;
- }
- }
|