亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP 查詢多級分類的實例程序代碼

2024-05-04 21:48:06
字體:
來源:轉載
供稿:網友

分類表,比如category,字段有 id,parentid,title,查詢時,我們希望得到有層級關系的數組,就是頂級是頂級分類,然后每個分類中有個children子數組,記錄它的子分類,這樣一級一級的分級數組,代碼如下:

  1. //查詢 
  2.  
  3. $dsql->SetQuery("SELECT * FROM category ORDER BY sortorder ASC"); 
  4. $dsql->Execute('parentlist'); 
  5. $array = array(); 
  6. $parentlist = array(); 
  7. while ($rs=$dsql->getObject('parentlist')) 
  8.     if($rs->parentid == 0) 
  9.     { 
  10.         $parentlist[$rs->id] = (array)$rs
  11.     } 
  12.     else 
  13.     { 
  14.         $array[$rs->id] = (array)$rs
  15.     } 
  16. $parentlist = cat_options($parentlist$array);  //我們求的結果數組 
  17.  
  18. //$list父級分類的數組 
  19.  
  20. //$array是除父級分類外的全部分類的數組 
  21.  
  22. function cat_options(&$list,&$array
  23.     foreach ($list as $key => $arr
  24.     { 
  25.         foreach ($array as $k => $value
  26.         { 
  27.             if($value['parentid'] == $arr['id']) 
  28.             { 
  29.                 $list[$key]['children'][] = $value
  30.                 unset($array[$k]); 
  31.             } 
  32.         } 
  33.     } 
  34.     foreach ($list as $key => $arr
  35.     { 
  36.         if(is_array($arr['children']) && count($arr['children']) > 0) 
  37.         { 
  38.             $list[$key]['children'] = cat_options($list[$key]['children'], $array); 
  39.         } 
  40.     } 
  41.     return $list

好了現在給大家推薦一個無限分類的函數,代碼如下:

  1. <?php     
  2. //模擬PHP無限分類查詢結果     
  3. return array(     
  4. array(     
  5. ‘id’=>1,     
  6. ‘pid’=>0,     
  7. ‘name’=>‘主頁’     
  8. ),     
  9. array(     
  10. ‘id’=>2,     
  11. ‘pid’=>0,     
  12. ‘name’=>‘新聞’     
  13. ),     
  14. array(     
  15. ‘id’=>3,     
  16. ‘pid’=>0,     
  17. ‘name’=>‘媒體’     
  18. ),     
  19. array(     
  20. ‘id’=>4,     
  21. ‘pid’=>0,     
  22. ‘name’=>‘下載’     
  23. ),     
  24. array(     
  25. ‘id’=>5,     
  26. ‘pid’=>0,     
  27. ‘name’=>‘關于我們’     
  28. ),     
  29. array(     
  30. ‘id’=>6,     
  31. ‘pid’=>2,     
  32. ‘name’=>‘天朝新聞’     
  33. ),     
  34. array(     
  35. ‘id’=>7,     
  36. ‘pid’=>2,     
  37. ‘name’=>‘海外新聞’     
  38. ),     
  39. array(     
  40. ‘id’=>8,     
  41. ‘pid’=>6,     
  42. ‘name’=>‘州官新聞’     
  43. ),     
  44. array(     
  45. ‘id’=>9,     
  46. ‘pid’=>3,     
  47. ‘name’=>‘音樂’     
  48. ),     
  49. array(     
  50. ‘id’=>10,     
  51. ‘pid’=>3,     
  52. ‘name’=>‘電影’     
  53. ),     
  54. array(     
  55. ‘id’=>11,     
  56. ‘pid’=>3,     
  57. ‘name’=>‘小說’     
  58. ),     
  59. array(     
  60. ‘id’=>12,     
  61. ‘pid’=>9,     
  62. ‘name’=>‘鈴聲’     
  63. ),     
  64. array(     
  65. ‘id’=>13,     
  66. ‘pid’=>9,     
  67. ‘name’=>‘流行音樂’     
  68. ),     
  69. array(     
  70. ‘id’=>14,     
  71. ‘pid’=>9,     
  72. ‘name’=>‘古典音樂’     
  73. ),     
  74. array(     
  75. ‘id’=>15,     
  76. ‘pid’=>12,     
  77. ‘name’=>‘熱門鈴聲’     
  78. ),     
  79. array(     
  80. ‘id’=>16,     
  81. ‘pid’=>12,     
  82. ‘name’=>‘搞笑鈴聲’     
  83. ),     
  84. array(     
  85. ‘id’=>17,     
  86. ‘pid’=>12,     
  87. ‘name’=>‘MP3鈴聲’     
  88. ),     
  89. array(     
  90. ‘id’=>18,     
  91. ‘pid’=>17,     
  92. ‘name’=>‘128K’     
  93. ),     
  94. array(     
  95. ‘id’=>19,     
  96. ‘pid’=>8,     
  97. ‘name’=>‘娛樂新聞’     
  98. ),     
  99. array(     
  100. ‘id’=>20,     
  101. ‘pid’=>11,     
  102. ‘name’=>‘穿越類’     
  103. ),     
  104. array(     
  105. ‘id’=>21,     
  106. ‘pid’=>11,     
  107. ‘name’=>‘武俠類’     
  108. ),     
  109. );     
  110. ?> 

無限分類函數,代碼如下:

  1. <?php     
  2.           
  3. /**     
  4.           
  5. * Tree 樹型類(無限分類)     
  6.          
  7.  
  8.           
  9. * @version 1.0     
  10.           
  11. * @access public      
  12. * @example      
  13. *   $tree= new Tree($result);     
  14.           
  15. *   $arr=$tree->leaf(0);     
  16.           
  17. *   $nav=$tree->navi(15);     
  18.           
  19. */ 
  20.           
  21. class Tree {     
  22.           
  23.         private $result;     
  24.           
  25.         private $tmp;     
  26.           
  27.         private $arr;     
  28.           
  29.         private $already = array();     
  30.           
  31.         /**     
  32.           
  33.          * 構造函數     
  34.           
  35.          *      
  36.          * @param array $result 樹型數據表結果集     
  37.           
  38.          * @param array $fields 樹型數據表字段,array(分類id,父id)     
  39.           
  40.          * @param integer $root 頂級分類的父id     
  41.           
  42.          */ 
  43.           
  44.         public function __construct($result$fields = array('id''pid'), $root = 0) {     
  45.           
  46.                 $this->result = $result;     
  47.           
  48.                 $this->fields = $fields;     
  49.           
  50.                 $this->root = $root;     
  51.           
  52.                 $this->handler();     
  53.           
  54.         }     
  55.           
  56.         /**     
  57.           
  58.          * 樹型數據表結果集處理     
  59.           
  60.          */ 
  61.           
  62.         private function handler() {     
  63.           
  64.                 foreach ($this->result as $node) {     
  65.           
  66.                         $tmp[$node[$this->fields[1]]][] = $node;     
  67.           
  68.                 }     
  69.           
  70.                 krsort($tmp);     
  71.           
  72.                 for ($i = count($tmp); $i > 0; $i--) {     
  73.           
  74.                         foreach ($tmp as $k => $v) {     
  75.           
  76.                                 if (!in_array($k$this->already)) {     
  77.           
  78.                                         if (!$this->tmp) {     
  79.           
  80.                                                 $this->tmp = array($k$v);    
  81.           
  82.                                                 $this->already[] = $k;     
  83.           
  84.                                                 continue;     
  85.           
  86.                                         } else {     
  87.           
  88.                                                 foreach ($v as $key => $value) {     
  89.           
  90.                                                         if ($value[$this->fields[0]] == $this->tmp[0]) {     
  91.           
  92.                                                                 $tmp[$k][$key]['child'] = $this->tmp[1];     
  93.           
  94.                                                                 $this->tmp = array($k$tmp[$k]);     
  95.           
  96.                                                         }     
  97.           
  98.                                                 }     
  99.           
  100.                                         }     
  101.           
  102.                                 }     
  103.           
  104.                         }     
  105.           
  106.                         $this->tmp = null;     
  107.           
  108.                 }     
  109.           
  110.                 $this->tmp = $tmp;     
  111.           
  112.         }     
  113.           
  114.         /**     
  115.           
  116.          * 反向遞歸     
  117.           
  118.          */ 
  119.           
  120.         private function recur_n($arr$id) {     
  121.           
  122.                 foreach ($arr as $v) {     
  123.           
  124.                         if ($v[$this->fields[0]] == $id) {     
  125.           
  126.                                 $this->arr[] = $v;     
  127.           
  128.                                 if ($v[$this->fields[1]] != $this->root) $this->recur_n($arr$v[$this->fields[1]]);     
  129.           
  130.                         }     
  131.           
  132.                 }     
  133.           
  134.         }     
  135.           
  136.         /**     
  137.           
  138.          * 正向遞歸     
  139.           
  140.          */ 
  141.           
  142.         private function recur_p($arr) {     
  143.           
  144.                 foreach ($arr as $v) {     
  145.           
  146.                         $this->arr[] = $v[$this->fields[0]];     
  147.           
  148.                         if ($v['child']) $this->recur_p($v['child']);     
  149.           
  150.                 }     
  151.           
  152.         }     
  153.           
  154.         /**     
  155.           
  156.          * 菜單 多維數組     
  157.           
  158.          *      
  159.          * @param integer $id 分類id     
  160.           
  161.          * @return array 返回分支,默認返回整個樹     
  162.           
  163.          */ 
  164.           
  165.         public function leaf($id = null) {     
  166.           
  167.                 $id = ($id == null) ? $this->root : $id;     
  168.           
  169.                 return $this->tmp[$id];     
  170.           
  171.         }     
  172.           
  173.         /**     
  174.           
  175.          * 導航 一維數組     
  176.           
  177.          *      
  178.          * @param integer $id 分類id     
  179.           
  180.          * @return array 返回單線分類直到頂級分類     
  181.           
  182.          */ 
  183.           
  184.         public function navi($id) {     
  185.           
  186.                 $this->arr = null;     
  187.           
  188.                 $this->recur_n($this->result, $id);     
  189.           
  190.                 krsort($this->arr);     
  191.           
  192.                 return $this->arr;     
  193.           
  194.         }     
  195.           
  196.         /**     
  197.           
  198.          * 散落 一維數組     
  199.           
  200.          *      
  201.          * @param integer $id 分類id     
  202.           
  203.          * @return array 返回leaf下所有分類id     
  204.           
  205.          */ 
  206.           
  207.         public function leafid($id) {     
  208.           
  209.                 $this->arr = null;     
  210.           
  211.                 $this->arr[] = $id;     
  212.           
  213.                 $this->recur_p($this->leaf($id));     
  214.           
  215.                 return $this->arr;     
  216.           
  217.         }     
  218.           
  219. }     
  220.           
  221. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩一二三在线视频播| 在线国产精品视频| 日韩美女在线看| 国产精品爱久久久久久久| 亚洲视频在线视频| 欧美视频一区二区三区…| 国产精品精品一区二区三区午夜版| 国产精品久在线观看| 日本精品免费一区二区三区| 日韩欧美在线看| 日韩精品免费综合视频在线播放| 国模精品视频一区二区三区| 91中文字幕一区| 中文字幕日韩精品有码视频| 国产精品久久久久久久9999| 九九久久久久久久久激情| 欧美一级视频免费在线观看| 九九热这里只有在线精品视| 日韩av电影院| 2025国产精品视频| 日韩欧美极品在线观看| 日韩精品在线视频| 日韩在线观看电影| 精品国产欧美一区二区三区成人| 中文字幕精品—区二区| 国产主播欧美精品| 高清欧美性猛交xxxx黑人猛交| 亚洲成人av在线播放| 精品爽片免费看久久| 91精品国产网站| 成人性生交大片免费观看嘿嘿视频| 姬川优奈aav一区二区| 成人免费直播live| 中文字幕国产亚洲2019| 日韩在线高清视频| 91日本在线观看| 国产精品mp4| 欧美精品亚州精品| 精品福利樱桃av导航| 亚洲精品videossex少妇| 国产在线观看精品| 中文字幕日韩在线视频| 亚洲女人天堂色在线7777| 亚洲午夜色婷婷在线| 永久免费毛片在线播放不卡| 欧美在线一区二区视频| 精品国产1区2区| 色无极亚洲影院| 国产精品久久久av| 久久人人爽人人爽人人片av高清| 亚洲成人中文字幕| 美女av一区二区三区| 国产精品嫩草影院一区二区| 国产精品美女免费视频| 久久精品国亚洲| 欧美一级免费视频| 亚洲国产精品久久精品怡红院| 国产精品色视频| 国内精品一区二区三区四区| 精品毛片网大全| 日韩国产高清污视频在线观看| 欧美黑人极品猛少妇色xxxxx| 国产亚洲精品久久久久久| 久久久久久久成人| 日本精品中文字幕| 欧美老女人性生活| 精品国产一区二区三区久久狼5月| 亚洲精品美女在线观看播放| 91日韩在线视频| 久久精品国产免费观看| 91在线高清免费观看| 欧美中文字幕在线播放| 日韩电影在线观看永久视频免费网站| 亚洲电影在线观看| 国产成人精品视频在线观看| 亚洲影院在线看| 亚洲欧洲免费视频| 18一19gay欧美视频网站| 精品综合久久久久久97| 97香蕉久久夜色精品国产| 91高清免费在线观看| 日韩激情av在线免费观看| 色狠狠久久aa北条麻妃| 欧美成在线视频| 欧美综合在线观看| 国产欧美日韩免费看aⅴ视频| 国产精品扒开腿做| 国产精品678| 亚洲激情视频在线| 国产综合久久久久| 久久琪琪电影院| 国产精品在线看| 欧美大片免费看| 欧美二区在线播放| 最近2019中文免费高清视频观看www99| 久久久久国色av免费观看性色| 亚洲欧美激情四射在线日| 成人久久久久久久| 国产精品电影观看| 日韩高清免费在线| 亚洲成人久久网| 日韩精品极品毛片系列视频| 国产精品网站入口| 亚洲第一免费播放区| 日韩av中文字幕在线播放| 日韩电影中文 亚洲精品乱码| 亚洲视频在线观看网站| 日韩美女毛茸茸| 日韩免费在线看| 欧美激情手机在线视频| 成人在线视频网站| 日本sm极度另类视频| 成人网在线免费观看| 国产精品综合久久久| 国产精品吴梦梦| 91麻豆国产精品| 亚洲国产精品人久久电影| 久久国内精品一国内精品| 亚洲美女动态图120秒| 2019亚洲男人天堂| 日韩二区三区在线| 日韩精品免费在线观看| 亚洲高清一二三区| 欧美最猛性xxxxx(亚洲精品)| 亚洲国产天堂久久综合| 欧美乱妇高清无乱码| 97人洗澡人人免费公开视频碰碰碰| 久久影院中文字幕| 亚洲成人在线网| 亚洲一区二区三区四区视频| 国产精品偷伦视频免费观看国产| 91po在线观看91精品国产性色| 亚洲色图25p| 91精品视频在线看| 亚洲成人黄色网| 欧美激情中文字幕乱码免费| 午夜精品福利电影| 亚洲人成网站色ww在线| 国产一区二区美女视频| 亚洲精品国精品久久99热| 久久久久免费视频| 国产午夜精品视频| 美日韩精品视频免费看| 亚洲一区二区在线| 亚洲福利视频网| 亚洲第一av网站| 国产精品精品久久久| 国内精品一区二区三区四区| 亚洲精品久久在线| 久久亚洲春色中文字幕| 91精品国产综合久久久久久蜜臀| 国产精品69久久| 亚洲欧美www| 国产一区二区三区网站| 国产日韩中文在线| 欧美精品激情blacked18| 国产精品入口尤物| 欧美激情精品久久久久久变态| 亚洲国产一区二区三区四区| 日韩激情视频在线播放| 亚洲色图激情小说| 欧美最猛性xxxx| 蜜月aⅴ免费一区二区三区| 日韩欧美精品在线观看|