国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泗水县| 天等县| 苏尼特右旗| 股票| 平南县| 吉木乃县| 永靖县| 伊春市| 南丹县| 汨罗市| 三亚市| 濉溪县| 涟水县| 菏泽市| 开原市| 越西县| 徐汇区| 思南县| 永靖县| 花莲县| 浦东新区| 南乐县| 纳雍县| 灵山县| 渑池县| 龙井市| 乐业县| 兴山县| 高安市| 日照市| 镇雄县| 云霄县| 溧阳市| 甘孜县| 湘阴县| 蕉岭县| 西林县| 南阳市| 秦皇岛市| 泌阳县| 古蔺县|