ホームページ >バックエンド開発 >PHPチュートリアル >9 行のコードは無駄すぎます。5 行のコードで十分です。無限分類データのツリー形式を実装する必要はありません。

9 行のコードは無駄すぎます。5 行のコードで十分です。無限分類データのツリー形式を実装する必要はありません。

WBOY
WBOYオリジナル
2016-07-25 09:06:331451ブラウズ
多くのオープンソース ソフトウェアの無限分類では再帰アルゴリズムが使用されていることはわかっていますが、再帰によって時間とスペース (メモリ) が浪費されることもわかっています。
前回、私自身のオリジナルの無限分類スパニング ツリー メソッドも共有しました。熱心な PHP 専門家のネットユーザーが私に貴重な提案をくれたので、このコードの時間が非常に短いことがわかりました。 http://www.oschina.net/code/snippet_98719_11296、再度整理してみたところ、データベース内のデータをクエリした後、すでにキー値が設定されていることがわかりました。そのため、実際には、通常、フォーマットされたメイン値をクエリします。キーの値はデータの形式に対応しているため、そのようなデータを直接使用して、ループの層を排除できます。コードも非常に簡潔です。
  1. /**
  2. * このメソッドは @Tonton によって提供されています
  3. * http://my.oschina.net/u/918697
  4. * @date 2012-12-12
  5. */
  6. function genTree5($items) {
  7. foreach ($items として $item)
  8. $items[$item['pid']]['son '][$item['id']] = &$items[$item['id']];
  9. isset($items[0]['son']) を返す ? $items[0]['son'] : array();
  10. }
  11. /**
  12. * データをツリー構造にフォーマットします
  13. * @author Xuefen.Tong
  14. * @param array $items
  15. * @return array
  16. */
  17. function genTree9($items) {
  18. $tree = array(); //格式化好的树
  19. foreach ($items as $item)
  20. if (isset($items[$item['pid']]))
  21. $items[$item['pid']]['son' ][] = &$items[$item['id']];
  22. else
  23. $tree[] = &$items[$item['id']];
  24. return $tree;
  25. }
  26. $items = array(
  27. 1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),
  28. 2 => array(' id' => 2, 'pid' => 0, '名前' => '黒竜江省'),
  29. 3 => 3, 'pid' => 1, 'name' => '南昌市'),
  30. 4 => array('id' => 4, 'pid' => 2, 'name' => 'ハルビン市'),
  31. 5 = > array('id' => 5, 'pid' => 2, 'name' => '集西市'),
  32. 6 => array('id' => 6, 'pid' => 4, '名前' => '翔坊区'),
  33. 7 => array('id' => 7, '名前' => '南港区' ),
  34. 8 => array('id' => 8, 'pid' => 6, 'name' => '六角路'),
  35. 9 => array('id' = > 9, 'pid' => 7, 'name' => 'Xidazhi Street'),
  36. 10 => array('id' => 10, 'name' => ; '東北林業大学'),
  37. 11 => array('id' => 11, 'pid' => 9, 'name' => 'ハルビン工業大学'),
  38. 12 => array('id' => 12, 'pid' => 8, 'name' => 'ハルビン師範大学'),
  39. 13 => array('id' => 13, ' pid' = > 1, '名前' => '甘州市'),
  40. 14 => 配列('id' => 14, '名前' => '甘州県') ,
  41. 15 => array('id' => 15, 'pid' => 13, 'name' => '玉都県'),
  42. 16 => array('id' => 16 , 'pid' => 14, 'name' => 'Maodian Town'),
  43. 17 => array('id' => 17, 'name' => '伊達天郷'),
  44. 18 => array('id' => 18, 'pid' => 16, 'name' => '宜源村'),
  45. 19 = > array('id' ' => 19, 'pid' => 16, 'name' => 'シャンバ村'),
  46. );
  47. print_r(genTree5( $items));
  48. print_r (genTree9($items));
  49. //後者の出力形式は、配列のキー値が異なることを除いて前者と似ていますが、データ構造には影響しません
  50. /*
  51. Array
  52. (
  53. [ 0] => 配列
  54. (
  55. [id] => 1
  56. [pid] => 0
  57. [名前] => 江西省
  58. [息子] => 配列
  59. (
  60. [0] =>配列
  61. (
  62. [id] => 3
  63. [pid] => 1
  64. [名前] => 南昌市
  65. )
  66. [1] => 配列
  67. (
  68. [id] => 13
  69. [pid ] => 1
  70. [名前] => 甘州市
  71. [息子] => 配列
  72. (
  73. [id] => 14
  74. => ; 13
  75. [名前] => 甘県
  76. [息子] => 配列
  77. (
  78. [0] => > 毛店町
  79. [息子] => 配列
  80. (
  81. [0] => 配列
  82. (
  83. ) [id] => 18
  84. [pid] => 16
  85. [名前] => イーユアン村
  86. [1] => 配列
  87. (
  88. [id] => 19
  89. [pid] = > [1] => 配列
  90. (
  91. [id] => 17
  92. [pid] => 14
  93. [名前] => 大田郷
  94. )
  95. )
  96. )
  97. [1] => 配列
  98. (
  99. [id] => 15
  100. [pid] => 13
  101. [名前] =>玉都県
  102. )
  103. )
  104. )
  105. )
  106. )
  107. [1] => 配列
  108. (
  109. [id] => 2
  110. [pid] => 0
  111. [name] => ;黒竜江省
  112. [息子] => 配列
  113. (
  114. [0] => 配列
  115. (
  116. [id] => 4
  117. [pid] => 2
  118. [名前] => ハルビン市
  119. [ 息子] => 配列
  120. (
  121. [0] => 配列
  122. (
  123. [id] => 6
  124. [pid] => 4
  125. [名前] => 襄坊区
  126. [息子] => 配列
  127. (
  128. [0] => 配列
  129. (
  130. [id] => 8
  131. [pid] => 6
  132. [名前] => 六角路
  133. [息子] => 配列
  134. (
  135. [0 ] => 配列
  136. (
  137. [id] => 10
  138. [pid] => 8
  139. [名前] =>
  140. 東北林業大学
  141. )
  142. [1] => 配列
  143. (
  144. [id] ] => 12
  145. [pid] =>
  146. (
  147. [id] => 7
  148. [pid] => 4
  149. [名前] => 南港区
  150. [息子] => 配列
  151. (
  152. [0] =>配列
  153. (
  154. [id] => 9
  155. [pid] => 7
  156. [name] => 配列 配列
  157. (
  158. [id] => 5
  159. [pid] => 2
  160. [名前] =>鶏西市
  161. )
  162. )
  163. )
  164. )*/
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。