Tree.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace app\common\util;
  3. class Tree
  4. {
  5. /**
  6. * 示例数组
  7. * @var array|array[]
  8. */
  9. public array $array = [
  10. ['id' => 1, 'name' => 'ha1', 'parent_id' => 0],
  11. ['id' => 2, 'name' => 'ha2', 'parent_id' => 0],
  12. ['id' => 3, 'name' => 'ha3', 'parent_id' => 0],
  13. ['id' => 4, 'name' => 'ha4', 'parent_id' => 1],
  14. ['id' => 5, 'name' => 'ha5', 'parent_id' => 1],
  15. ['id' => 6, 'name' => 'ha6', 'parent_id' => 2],
  16. ];
  17. /**
  18. * 1级转1维数组无限极分类
  19. * @param array $array
  20. * @param int $parent_id
  21. * @return array
  22. */
  23. public function getTree(array $array, int $parent_id = 0): array
  24. {
  25. static $data = [];
  26. foreach ($array as $key => $value) {
  27. if ($value['parent_id'] == $parent_id) {
  28. $data[] = $value;
  29. unset($array[$key]);
  30. $this->getTree($array, $value['id']);
  31. }
  32. }
  33. return $data;
  34. }
  35. /**
  36. * 1级转2维数组数无限极分类
  37. * @param array $array
  38. * @return array
  39. */
  40. public function getTreeV2(array $array): array
  41. {
  42. $refer = [];
  43. $tree = [];
  44. foreach ($array as $key => $val) {
  45. $refer[$val['id']] = &$array[$key];
  46. $refer[$val['id']]['label'] = $val['name'];
  47. }
  48. foreach ($array as $k => $v) {
  49. $pid = $v['parent_id']; //获取当前分类的父级id
  50. if ($pid == 0) {
  51. $tree[] = &$array[$k]; //顶级栏目
  52. } else {
  53. if (isset($refer[$pid])) {
  54. $refer[$pid]['children'][] = &$array[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
  55. }
  56. }
  57. }
  58. return $tree;
  59. }
  60. }