首頁  >  文章  >  後端開發  >  PHP無限分類[增強版]

PHP無限分類[增強版]

WBOY
WBOY原創
2016-07-25 08:42:26831瀏覽
增強版,PHP
  1. /**
  2. ---------------------------------- -
  3. * 유니버설 트리 클래스
  4. -------------------------- ------ ----------
  5. * @author yangyunzhou@foxmail.com
  6. ------- --- ----------
  7. * @date 2010년 11월 23일 10:09:31
  8. ------ - --------------
  9. */
  10. 클래스 트리
  11. {
  12. /**
  13. ---------------------------------- -
  14. * 트리 구조를 생성하려면 2차원 배열이 필요합니다
  15. -------------------------------- - ---------------
  16. * @author yangyunzhou@foxmail.com
  17. ------- - --------------
  18. * @var 배열
  19. */
  20. var $arr = array();
  21. /**
  22. ---------------------------------- -
  23. * 트리 구조 생성에 필요한 수정 기호는 그림으로 대체 가능
  24. ------------- -- ---
  25. * @author yangyunzhou@foxmail.com
  26. ------------------ -- -------------------
  27. * @var 배열
  28. */
  29. var $icon = array('│','├',' └');
  30. /**
  31. * @액세스 프라이빗
  32. */
  33. var $ret = '';
  34. /**
  35. * 생성자, 클래스 초기화
  36. * @param array 2차원 배열, 예:
  37. * array(
  38. * 1 => array('id'=>'1',' parentid '=>0,'name'=>'1단계 열 1'),
  39. * 2 => array('id'=>'2','parentid'=>0, 'name'=>'첫 번째 수준 열 2'),
  40. * 3 => array('id'=>'3','parentid'=>1,'name'=>' 두 번째 수준 열 1'),
  41. * 4 => array('id'=>'4','parentid'=>1,'name'=>'두 번째 수준 열 2') ,
  42. * 5 => array('id'=>'5','parentid'=>2,'name'=>'두 번째 수준 열 3'),
  43. * 6 = > array('id '=>'6','parentid'=>3,'name'=>'3번째 열 1'),
  44. * 7 => array('id' =>'7', 'parentid'=>3,'name'=>'3번째 열 2')
  45. * )
  46. */
  47. 함수 트리($arr=array())
  48. {
  49. $this->arr = $arr;
  50. $this->ret = '';
  51. return is_array($arr);
  52. }
  53. /* *
  54. * 상위 배열 가져오기
  55. * @param int
  56. * @return 배열
  57. */
  58. 함수 get_parent($myid)
  59. {
  60. $newarr = array();
  61. if(!isset($this->arr[$myid])) return false;
  62. $pid = $this->arr[$myid]['parentid'];
  63. $pid = $this->arr[$pid]['parentid'];
  64. if (is_array($this->arr))
  65. {
  66. foreach($this->arr as $id => $a)
  67. {
  68. if($a['parentid' ] == $pid) $newarr[$id] = $a;
  69. }
  70. }
  71. return $newarr;
  72. }
  73. /**
  74. * 하위 배열 가져오기
  75. * @param int
  76. * @return 배열
  77. */
  78. 함수 get_child($myid)
  79. {
  80. $a = $newarr = array();
  81. if(is_array($this->arr))
  82. {
  83. foreach($ this->arr as $id => $a)
  84. {
  85. if($a['parentid'] == $myid) $newarr[$id] = $a;
  86. }
  87. }
  88. return $newarr ? $newarr : false;
  89. }
  90. /**
  91. * 현재 위치 배열 가져오기
  92. * @param int
  93. * @return 배열
  94. */
  95. function get_pos($myid,&$newarr)
  96. {
  97. $a = array();
  98. if(!isset($this->arr[$myid])) return false;
  99. $newarr[] = $this->arr[$myid];
  100. $pid = $this ->arr[$myid]['parentid'];
  101. if(isset($this->arr[$pid]))
  102. {
  103. $this->get_pos($pid, $newarr);
  104. }
  105. if(is_array($newarr))
  106. {
  107. krsort($newarr);
  108. foreach($newarr as $v)
  109. {
  110. $a[$v['id']] = $v;
  111. }
  112. }
  113. return $a;
  114. }
  115. /**
  116. * -------------------------------------
  117. * 得到樹型結構
  118. * -------------------------------------------------
  119. * @author yangyunzhou@foxmail. com
  120. * @param $myid 表示取得這個ID下的所有子層級
  121. * @param $str 產生樹狀結構基本程式碼, 例如: "
  122. * @param $sid 被選中的ID, 例如在做樹形下拉框的時候需要用到
  123. * @param $adds
  124. * @param $str_group
  125. group
  126. */
  127. function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
  128. {
  129. $number=1;
  130. $child = $this->get_child($myid);
  131. if(is_array($child)) {
  132. $total = count($child);
  133. foreach ( $child as $id=>$a) {
  134. $j=$k='';
  135. if($number==$total) {
  136. $j .= $this->; icon[2];
  137. } else {
  138. $j .= $this->icon[1];
  139. $k = $adds ? $this->icon[0] : '';
  140. }
  141. $spacer = $adds ? $adds.$j : '';
  142. $selected = $id==$sid ? '選定' : '';
  143. @extract($a);
  144. $parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";");
  145. $this->ret .= $nstr;
  146. $this->; get_tree($id, $str, $sid, $adds.$k.' ',$str_group);
  147. $number ;
  148. }
  149. }
  150. return $this->ret ;
  151. }
  152. /**
  153. * 同上一方法類似,但允許多選
  154. */
  155. function get_tree_multi($myid, $str, $sid = 0, $adds = '')
  156. {
  157. $ number=1 ;
  158. $child = $this->get_child($myid);
  159. if(is_array($child))
  160. {
  161. $total = count($child);
  162. foreach($子代為$id=>$a)
  163. {
  164. $j=$k='';
  165. if($number==$total)
  166. {
  167. $ j .= $this ->icon[2];
  168. }
  169. else
  170. {
  171. $j .= $this->icon[1];
  172. $k = $adds ? 0] : '';
  173. }
  174. $spacer = $adds ? $adds.$j : '';
  175. $selected = $this->have($sid,$id) ? '選定' : '';
  176. @extract($a);
  177. eval("$nstr = "$str";");
  178. $this->ret .= $nstr;
  179. $this->get_tree_multi($id, $str, $sid, $adds.$k.' ');
  180. $number ;
  181. }
  182. }
  183. return $this- >ret;
  184. }
  185. 函數有($list,$item){
  186. return(strpos(',,'.$list.',',','.$item.',') );
  187. }
  188. /**
  189. ----------------------------------------------- -
  190. * 格式化數組
  191. --------------------------------------- ---------
  192. * @author yangyunzhou@foxmail.com
  193. --------------------------- ---------------------
  194. */
  195. function getArray($myid=0, $sid=0, $adds='')
  196. {
  197. $ number=1;
  198. $child = $this->get_child($myid);
  199. if(is_array($child)) {
  200. $total = count($child);
  201. foreach($子代$id=>$a) {
  202. $j=$k='';
  203. if($number==$total) {
  204. $j .= $this ->icon[2] ;
  205. } else {
  206. $j .= $this->icon[1];
  207. $k = $adds ? $this->icon[0] : '';
  208. }
  209. $spacer = $adds ? $adds.$j : '';
  210. @extract($a);
  211. $a['name'] = $spacer.' '.$a['name'];
  212. $this->ret[$a['id']] = $a;
  213. $fd = $adds.$k。 ';
  214. $this->getArray($id, $sid, $fd);
  215. $number ;
  216. }
  217. }
  218. return $this->ret;
  219. }
return $this->ret;
}}?>

複製程式碼
  1. 用法:
  2. $tree = new Tree; // new 之前請記得包含tree檔! // 資料格式請參考tree方法上面的註解!使用get_tree 方法
  3. $tree->get_tree();
複製程式碼

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn