Catetree.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace catetree;
  3. class Catetree{
  4. //无限级分类
  5. public function getMenu($menu){
  6. return $this->sort($menu); //返回排序成功后的数据
  7. }
  8. //对栏目进行排序
  9. public function sort($menu,$pid=0,$level=0){
  10. static $arr=array(); //静态数组
  11. foreach ($menu as $k => $v) { //遍历数据
  12. if($v['pid']==$pid){ //第一次 pid=0 的顶级数组全部循环出来
  13. $v['level']=$level;
  14. $arr[]=$v;
  15. $this->sort($menu,$v['id'],$level+1); //递归找下级子栏目
  16. }
  17. }
  18. return $arr;
  19. }
  20. //获取子栏目id
  21. public function childrenids($cateid,$obj){
  22. $data=$obj->field('id,pid')->select();
  23. return $this->_childrenids($data,$cateid);
  24. }
  25. private function _childrenids($data,$cateid){
  26. static $arr=array();
  27. foreach ($data as $k => $v) {
  28. if($v['pid']==$cateid){
  29. $arr[]=$v['id'];
  30. $this->_childrenids($data,$v['id']);
  31. }
  32. }
  33. return $arr;
  34. }
  35. //处理栏目排序
  36. public function cateSort($data,$obj){
  37. foreach ($data as $k => $v) {
  38. $obj->update(['id'=>$k,'sort'=>$v]);
  39. }
  40. }
  41. //处理批量删除
  42. public function pdel($cateids){
  43. foreach ($cateids as $k => $v) {
  44. $childrenidsarr[]=$this->childrenids($v);
  45. $childrenidsarr[]=(int)$v;
  46. }
  47. $_childrenidsarr=array();
  48. foreach ($childrenidsarr as $k => $v) {
  49. if(is_array($v)){
  50. foreach ($v as $k1 => $v1) {
  51. $_childrenidsarr[]=$v1;
  52. }
  53. }else{
  54. $_childrenidsarr[]=$v;
  55. }
  56. }
  57. $_childrenidsarr=array_unique($_childrenidsarr);
  58. $this::destroy($_childrenidsarr);
  59. }
  60. }