请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
无级分类...看的有木有???有就回复拉
CLASS********(回复了才给你看这个class)


[post]
  1. <?php
  2. class CCategoryStruct {
  3.     var $id;
  4.     var $pid;
  5.     var $order;
  6.     var $depth;
  7.     var $obj;
  8. }
  9. class CCategory {
  10.     var $data;
  11.     var $tdata;
  12.     var $maxOrder;
  13.     function CCategory () {
  14.         $this->data     = array();
  15.         $this->tdata    = array();
  16.         $this->maxOrder = 0;
  17.     }
  18. # **************************************************
  19. # 数据赋值
  20. # **************************************************
  21.     function assign ($arr, $f_id, $f_pid, $f_order) {
  22.         if (is_array($arr)) {
  23.             foreach ($arr as $v) {
  24.                 $this->assignOneSortOrder($v[$f_id], $v[$f_pid], $v[$f_order], $v);
  25.             }
  26.         } else {
  27.             $this->assignOneSortOrder($arr, $f_id, $f_pid, $f_order);
  28.         }
  29.     }
  30. # **************************************************
  31. # 单条记录赋值
  32. # **************************************************
  33.     function assignOne ($id, $pid, $order, $obj) {
  34.         $data = new CCategoryStruct;
  35.         $data->id       = $id;
  36.         $data->pid      = $pid;
  37.         $data->order    = $order;
  38.         $data->obj      = $obj;
  39.         $this->data[]   = $data;
  40.     }
  41. # **************************************************
  42. # 单条记录排序赋值
  43. # **************************************************
  44.     function assignOneSortOrder ($id, $pid, $order, $obj) {
  45.         $data = new CCategoryStruct;
  46.         $data->id    = $id;
  47.         $data->pid   = $pid;
  48.         $data->order = $order;
  49.         $data->obj   = $obj;
  50.         if ($order <= $this->maxOrder) {
  51.             $orderData = array();
  52.             $arr       = &$this->data;
  53.             $n         = count($arr);
  54.             $i         = 0;
  55.             while ($i < $n) {
  56.                 if ($order <= $arr[$i]->order) {
  57.                     break;
  58.                 } else {
  59.                     $orderData[] = $arr[$i];
  60.                 }
  61.                 $i++;
  62.             }
  63.             $orderData[] = $data;
  64.             while ($i < $n) {
  65.                 $orderData[] = $arr[$i];
  66.                 $i++;
  67.             }
  68.             $this->data = $orderData;
  69.         } else {
  70.             $this->maxOrder = $order;
  71.             $this->data[]   = $data;
  72.         }
  73.     }
  74. # **************************************************
  75. # 数据排序
  76. # **************************************************
  77.     function dataSortOrder ($flag = &#39;+&#39;) {
  78.         $arr = &$this->data;
  79.         for ($i = 0; $i < count($arr); $i++) {
  80.             for ($j = $i + 1; $j < count($arr); $j++) {
  81.                 if ( (($arr[$j]->order < $arr[$i]->order) && ($flag == &#39;+&#39;)) ||
  82.                      (($arr[$j]->order > $arr[$i]->order) && ($flag == &#39;-&#39;)) ) {
  83.                     $obj     = $arr[$i];
  84.                     $arr[$i] = $arr[$j];
  85.                     $arr[$j] = $obj;
  86.                 }
  87.             }
  88.         }
  89.     }
  90. # **************************************************
  91. # 获得节点信息
  92. # **************************************************
  93.     function getNode ($id) {
  94.         $arr = $this->data;
  95.         foreach ($arr as $v) {
  96.             if ($v->id == $id) return $v;
  97.         }
  98.     }
  99. # **************************************************
  100. # 获得子节点信息
  101. # **************************************************
  102.     function getChild ($id) {
  103.         $arr  = $this->data;
  104.         $data = array();
  105.         foreach ($arr as $v) {
  106.             if ($v->pid == $id) $data[] = $v;
  107.         }
  108.         return $data;
  109.     }
  110. # **************************************************
  111. # 获得父节点信息
  112. # **************************************************
  113.     function getParent ($id) {
  114.         $arr = $this->data;
  115.         foreach ($arr as $v) {
  116.             if ($v->id == $id) return $this->getNode($v->pid);
  117.         }
  118.     }
  119. # **************************************************
  120. # 获得全部子节点信息
  121. # **************************************************
  122.     function getChildren ($id = 0) {
  123.         $n = count($this->tdata);
  124.         if ($n > 0) {
  125.             $data = array();
  126.             $arr  = &$this->tdata;
  127.             $i    = 0;
  128.             while ($i < $n) {
  129.                 if ($arr[$i]->pid == $id) break;
  130.                 $i++;
  131.             }
  132.             if ($i == $n) return $data;
  133.             $depth  = $arr[$i]->depth;
  134.             while ($i < $n) {
  135.                 if ($arr[$i]->depth >= $depth) {
  136.                     $data[] = $arr[$i];
  137.                 } else {
  138.                     break;
  139.                 }
  140.                 $i++;
  141.             }
  142.             return $data;
  143.         } else {
  144.             $this->tdata = $this->getTreeList($id);
  145.             return $this->tdata;
  146.         }
  147.     }
  148. # **************************************************
  149. # 获得全部子节点信息
  150. # **************************************************
  151.     function getTreeList ($id = 0, $depth = 0, &$tData = array()) {
  152.         $arr = $this->data;
  153.         foreach ($arr as $v) {
  154.             if ($v->pid == $id) {
  155.                 $v->depth = $depth;
  156.                 $tData[]  = $v;
  157.                 $this->getTreeList($v->id, $depth + 1, $tData);
  158.             }
  159.         }
  160.         return $tData;
  161.     }
  162. # **************************************************
  163. # 获得全部父节点信息
  164. # **************************************************
  165.     function getParents ($id) {
  166.         $data = array();
  167.         while ($v = $this->getParent($id)) {
  168.             $data[] = $v;
  169.             $id     = $v->id;
  170.         }
  171.         return array_reverse($data);
  172.     }
  173. # **************************************************
  174. # 比较两个节点的关系
  175. # **************************************************
  176.     function compare ($id1, $id2) {
  177.         $data = $this->getChildren($id1);
  178.         foreach ($data as $v) {
  179.             if ($v->id == $id2) return &#39;p&#39;;
  180.         }
  181.         $data = $this->getParents($id1);
  182.         foreach ($data as $v) {
  183.             if ($v->id == $id2) return &#39;c&#39;;
  184.         }
  185.         $v1 = $this->getNode($id1);
  186.         $v2 = $this->getNode($id2);
  187.         if ($v1->pid == $v2->pid) return &#39;s&#39;;
  188.         return &#39;o&#39;;
  189.     }
  190. }
  191. ?>
复制代码
[/post]
收藏
[url=https://jq.qq.com/?_wv=1027&k=55PJPtJ][/url]

328 个回复

倒序浏览
看看,学习下。。
回复 使用道具 举报
111111111111111
回复 使用道具 举报
回复 使用道具 举报
chonger 游客 2012-5-18 00:01:32
5#
Re:无限级分类  要看的有木有!!
回复 使用道具 举报
chonger 游客 2012-5-18 00:01:39
6#
Re:无限级分类  要看的有木有!!
回复 使用道具 举报
李鹏_45 游客 2012-5-18 01:58:03
7#
回复 使用道具 举报
poppub 游客 2012-5-18 08:17:20
8#
看看啦2.。。。。
回复 使用道具 举报
tieying 游客 2012-5-18 08:20:47
9#
来看看 ,先顶一个
回复 使用道具 举报
zjqyyf 游客 2012-5-25 16:48:04
10#
这位朋友的东西已经是看第二个了 ··之前看过一个不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册