TreeHelper.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace lemo\helper;
  3. class TreeHelper
  4. {
  5. /**
  6. * 无线分类
  7. */
  8. public static function getTree($arr,$pid=0){
  9. $list =array();
  10. foreach ($arr as $k=>$v){
  11. if ($v['pid'] == $pid){
  12. $v['child'] = self::getTree($arr,$v['id']);
  13. $list[] = $v;
  14. }
  15. }
  16. return $list;
  17. }
  18. /**
  19. * 无限分类-权限
  20. * @param $cate 栏目
  21. * @param string $lefthtml 分隔符
  22. * @param int $pid 父ID
  23. * @param int $lvl 层级
  24. * @return array
  25. */
  26. public static function cateTree($cate , $lefthtml = '|— ' , $pid = 0 , $level = 0 ){
  27. $arr = array();
  28. foreach ($cate as $v){
  29. if ($v['pid'] == $pid) {
  30. $v['level'] = $level + 1;
  31. $v['lefthtml'] = str_repeat($lefthtml,$level);
  32. $v['ltitle'] = $v['lefthtml'].$v['title'];
  33. $arr[] = $v;
  34. $arr = array_merge($arr, self::cateTree($cate, $lefthtml, $v['id'], $level+1));
  35. }
  36. }
  37. return $arr;
  38. }
  39. /**
  40. * 传递一个父级分类ID返回所有子分类
  41. * @param $cate
  42. * @param $pid
  43. * @return array
  44. */
  45. public static function getChildsRule($rules, $pid)
  46. {
  47. $arr = [];
  48. foreach ($rules as $v) {
  49. if ($v['pid'] == $pid) {
  50. $arr[] = $v;
  51. $arr[] = $v;
  52. $arr = array_merge($arr, self::getChildsRule($rules, $v['id']));
  53. }
  54. }
  55. return $arr;
  56. }
  57. /**
  58. * 权限设置选中状态
  59. * @param $cate 栏目
  60. * @param int $pid 父ID
  61. * @param $rules 规则
  62. * @return array
  63. */
  64. public static function authChecked($cate , $pid = 0,$rules){
  65. $list = [];
  66. $rulesArr = explode(',',$rules);
  67. foreach ($cate as $v){
  68. if ($v['pid'] == $pid) {
  69. $v['spread'] = true;
  70. if(self::authChecked($cate,$v['id'],$rules)){
  71. $v['children'] =self::authChecked($cate,$v['id'],$rules);
  72. }else{
  73. if (in_array($v['id'], $rulesArr)) {
  74. $v['checked'] = true;
  75. }
  76. }
  77. $list[] = $v;
  78. }
  79. }
  80. return $list;
  81. }
  82. /**
  83. * 权限多维转化为二维
  84. * @param $cate 栏目
  85. * @param int $pid 父ID
  86. * @param $rules 规则
  87. * @return array
  88. */
  89. public static function authNormal($cate){
  90. $list = [];
  91. foreach ($cate as $v){
  92. $list[]['id'] = $v['id'];
  93. // $list[]['title'] = $v['title'];
  94. // $list[]['pid'] = $v['pid'];
  95. if (!empty($v['children'])) {
  96. $listChild = self::authNormal($v['children']);
  97. $list = array_merge($list,$listChild);
  98. }
  99. }
  100. return $list;
  101. }
  102. /**
  103. * 无线分类
  104. */
  105. public static function getSubject($arr,$pid=0){
  106. $list =array();
  107. foreach ($arr as $k=>$v){
  108. if ($v['major_id'] == $pid){
  109. $v['children'] = self::getSubject($arr,$v['id']);
  110. $list[] = $v;
  111. }
  112. }
  113. return $list;
  114. }
  115. }