>백엔드 개발 >PHP 튜토리얼 >PHP 무제한 분류 [향상된 버전]

PHP 무제한 분류 [향상된 버전]

WBOY
WBOY원래의
2016-07-25 08:42:26861검색
  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 Array
  19. */ var $arr = array();
  20. /**
  21. ----------------------------------------------- -
  22. * 產生樹型結構所需修飾符號,可換成圖片
  23. ----------------------------- -------------------
  24. * @author yangyunzhou@foxmail.com
  25. ----------------- -------------------------------
  26. * @var Array
  27. */
  28. var $icon = array('│','├',' └');
  29. /**
  30. * @access 私人
  31. */
  32. var $ret = '';
  33. /**
  34. * 建構函數,初始化類別
  35. * @param array 2維數組,例如:
  36. * array(
  37. * 1 => array('id'=>'1','parentid'= >0,'name'=>'一級欄位一'),
  38. * 2 => array('id'=>'2','parentid'=>0,'name'=>'一級欄位二'),
  39. * 3 => array('id'=>'3','parentid'=>1,'name'=>'二級欄位一'),
  40. * 4 => array ('id'=>'4','parentid'=>1,'name'=>'二級欄位二'),
  41. * 5 => array('id'=>'5','parentid '=>2,'name'=>'二級欄位三'),
  42. * 6 => array('id'=>'6','parentid'=>3,'name'=>'三級欄一'),
  43. * 7 => array('id'=>'7','parentid'=>3,'name'=>'三級欄位二')
  44. * )
  45. */
  46. 函數樹($arr=array())
  47. {
  48. $this->arr = $arr;
  49. $this->ret = '';
  50. return is_array($arr);
  51. }
  52. /* *
  53. * 得到父級陣列
  54. * @param int
  55. * @return array
  56. */
  57. function get_parent($myid)
  58. {
  59. $newarr = array();
  60. if(!isset($this->arr[$myid])) return false;
  61. $pid = $this->arr[$myid]['parentid'];
  62. $pid = $this->arr[$pid]['parentid'];
  63. if (is_array($this- >arr))
  64. {
  65. foreach($this->arr as $id => $a)
  66. {
  67. if($a['parentid' ] == $pid) $newarr[ $id] = $a;
  68. }
  69. }
  70. return $newarr;
  71. }
  72. /**
  73. * 得到子級數組
  74. * @param int
  75. * @return array
  76. */
  77. function get_child($myid)
  78. {
  79. $a = $newarr = array();
  80. if(is_array($this->arr))
  81. {
  82. foreach($ this->arr as $id =>; $a)
  83. {
  84. if($a['parentid'] == $myid) $newarr[$id] = $a;
  85. }
  86. }
  87. 回傳$newarr ? $ $ newarr : false;
  88. }
  89. /**
  90. * 取得目前位置陣列
  91. * @param int
  92. * @return array
  93. */
  94. function get_pos($myid,&$newarr)
  95. {
  96. $a = array();
  97. if(!isset($this->arr[$myid])) return false;
  98. $newarr[] = $this->arr[$myid];
  99. $pid = $this -> arr[$myid]['parentid'];
  100. if(isset($this->arr[$pid]))
  101. {
  102. $this->get_pos($pid, $newarr);
  103. }
  104. if(is_array($newarr))
  105. {
  106. krsort($newarr);
  107. foreach($newarr as $v)
  108. {
  109. $a[$v ['id']] = $v;
  110. }
  111. }
  112. 回傳$a;
  113. }
  114. /**
  115. * ---------------------------
  116. * 트리 가져오기 구조
  117. * ---------------------------
  118. * @ 작성자 yangyunzhou@foxmail.com
  119. * @param $myid는 이 ID 아래의 모든 하위 항목을 가져오는 것을 의미합니다
  120. * @param $str은 트리 구조의 기본 코드를 생성합니다. 예: "
  121. * @param $sid 트리 드롭다운 박스를 만들 때와 같이 선택한 ID입니다.
  122. * @param $adds
  123. * @param $str_그룹
  124. */
  125. 함수 get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
  126. {
  127. $number=1;
  128. $child = $this->get_child($myid);
  129. if(is_array($child)) {
  130. $total = count($child);
  131. foreach ($id=>$a인 $child) {
  132. $j=$k='';
  133. if($number==$total) {
  134. $j .= $this-> icon[2];
  135. } else {
  136. $j .= $this->icon[1];
  137. $k = $adds ? $this->icon[0] : '';
  138. }
  139. $spacer = $adds ? $adds.$j : '';
  140. $selected = $id==$sid ? '선택됨': '';
  141. @extract($a);
  142. $parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";");
  143. $this->ret .= $nstr;
  144. $this-> get_tree($id, $str, $sid, $adds.$k.' ',$str_group);
  145. $number ;
  146. }
  147. }
  148. return $this->ret ;
  149. }
  150. /**
  151. * 이전 방법과 유사하지만 다중 선택이 가능합니다
  152. */
  153. 함수 get_tree_multi($myid, $str, $sid = 0, $adds = '')
  154. {
  155. $ number=1;
  156. $child = $this->get_child($myid);
  157. if(is_array($child))
  158. {
  159. $total = count($child);
  160. foreach($child as $id=>$a)
  161. {
  162. $j=$k='';
  163. if($number==$total)
  164. {
  165. $ j .= $this->icon[2];
  166. }
  167. else
  168. {
  169. $j .= $this->icon[1];
  170. $k = $adds ? $this->icon[0] : '';
  171. }
  172. $spacer = $adds ? $adds.$j : '';
  173. $selected = $this->have($sid,$id) ? '선택됨': '';
  174. @extract($a);
  175. eval("$nstr = "$str";");
  176. $this->ret .= $nstr;
  177. $this->get_tree_multi($id, $str, $sid, $adds.$k.' ');
  178. $number ;
  179. }
  180. }
  181. return $this- >ret;
  182. }
  183. 함수 have($list,$item){
  184. return(strpos(',,'.$list.',',','.$item. ','));
  185. }
  186. /**
  187. ---------------------------------- -
  188. * 배열 형식 지정
  189. --------------------------- ----- ----------
  190. * @author yangyunzhou@foxmail.com
  191. -------- ------- -------------
  192. */
  193. 함수 getArray($myid=0, $sid=0, $adds='')
  194. {
  195. $number=1;
  196. $child = $this->get_child($myid);
  197. if(is_array($child)) {
  198. $total = count($child);
  199. foreach($child as $id=>$a) {
  200. $j=$k='';
  201. if($number==$total) {
  202. $j .= $this ->icon[2];
  203. } else {
  204. $j .= $this->icon[1];
  205. $k = $adds ? $this->icon[0] : '';
  206. }
  207. $spacer = $adds ? $adds.$j : '';
  208. @extract($a);
  209. $a['name'] = $spacer.' '.$a['name'];
  210. $this->ret[$a['id']] = $a;
  211. $fd = $adds.$k.' ';
  212. $this->getArray($id, $sid, $fd);
  213. $number ;
  214. }
  215. }
  216. return $this->ret;
  217. }
  218. }
  219. ?>
复代码

  1. 사용법:
  2. $tree = 새 트리; // new 之前请记得包含tree文件!
  3. $tree->tree($data); // 数据格式请参考 트리 방식 상면적 注释!
  4. // 如果使用数组, 请使用 getArray 방식
  5. $tree->getArray();
  6. // 下拉菜单选项使사용 get_tree방법
  7. $tree->get_tree();
复主代码

增强版, PHP


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.