Heim Backend-Entwicklung PHP-Tutorial 9行代码太浪费了,5行代码足矣,不用递归实现无限分类数据的树形格式化

9行代码太浪费了,5行代码足矣,不用递归实现无限分类数据的树形格式化

Jul 25, 2016 am 09:06 AM

我们知道很多开源软件的无限分类都是采用递归的算法,但是我们知道递归即浪费时间,又浪费空间(内存),
上次我也分享了个我自己原创的无限分类生成树的方法,一热心php高手网友给我提出了宝贵的建议,我测试了一下,这段代码的时间非常之短,参考: http://www.oschina.net/code/snippet_98719_11296,我再次整理了一下,发现数据库查询出数据之后,我们就已经定好了键值,因而实践中,我们一般会在model中查询出格式化成主键值对应数据的形式,因而我们可以直接用这样的数据,就少了一层循环。代码也非常简洁。
  1. /**
  2. * 此方法由@Tonton 提供
  3. * http://my.oschina.net/u/918697
  4. * @date 2012-12-12
  5. */
  6. function genTree5($items) {
  7. foreach ($items as $item)
  8. $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
  9. return 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, 'name' => '黑龙江省'),
  29. 3 => array('id' => 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, 'name' => '香坊区'),
  33. 7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
  34. 8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
  35. 9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
  36. 10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
  37. 11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
  38. 12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
  39. 13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
  40. 14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
  41. 15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
  42. 16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
  43. 17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
  44. 18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
  45. 19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
  46. );
  47. echo "
    ";
    Nach dem Login kopieren
  48. print_r(genTree5($items));
  49. print_r(genTree9($items));
  50. //后者输出格式,前者类似,只是数组键值不一样,不过不影响数据结构
  51. /*
  52. Array
  53. (
  54. [0] => Array
  55. (
  56. [id] => 1
  57. [pid] => 0
  58. [name] => 江西省
  59. [son] => Array
  60. (
  61. [0] => Array
  62. (
  63. [id] => 3
  64. [pid] => 1
  65. [name] => 南昌市
  66. )
  67. [1] => Array
  68. (
  69. [id] => 13
  70. [pid] => 1
  71. [name] => 赣州市
  72. [son] => Array
  73. (
  74. [0] => Array
  75. (
  76. [id] => 14
  77. [pid] => 13
  78. [name] => 赣县
  79. [son] => Array
  80. (
  81. [0] => Array
  82. (
  83. [id] => 16
  84. [pid] => 14
  85. [name] => 茅店镇
  86. [son] => Array
  87. (
  88. [0] => Array
  89. (
  90. [id] => 18
  91. [pid] => 16
  92. [name] => 义源村
  93. )
  94. [1] => Array
  95. (
  96. [id] => 19
  97. [pid] => 16
  98. [name] => 上坝村
  99. )
  100. )
  101. )
  102. [1] => Array
  103. (
  104. [id] => 17
  105. [pid] => 14
  106. [name] => 大田乡
  107. )
  108. )
  109. )
  110. [1] => Array
  111. (
  112. [id] => 15
  113. [pid] => 13
  114. [name] => 于都县
  115. )
  116. )
  117. )
  118. )
  119. )
  120. [1] => Array
  121. (
  122. [id] => 2
  123. [pid] => 0
  124. [name] => 黑龙江省
  125. [son] => Array
  126. (
  127. [0] => Array
  128. (
  129. [id] => 4
  130. [pid] => 2
  131. [name] => 哈尔滨市
  132. [son] => Array
  133. (
  134. [0] => Array
  135. (
  136. [id] => 6
  137. [pid] => 4
  138. [name] => 香坊区
  139. [son] => Array
  140. (
  141. [0] => Array
  142. (
  143. [id] => 8
  144. [pid] => 6
  145. [name] => 和兴路
  146. [son] => Array
  147. (
  148. [0] => Array
  149. (
  150. [id] => 10
  151. [pid] => 8
  152. [name] =>
  153. 东北林业大学
  154. )
  155. [1] => Array
  156. (
  157. [id] => 12
  158. [pid] => 8
  159. [name] =>
  160. 哈尔滨师范大学
  161. )
  162. )
  163. )
  164. )
  165. )
  166. [1] => Array
  167. (
  168. [id] => 7
  169. [pid] => 4
  170. [name] => 南岗区
  171. [son] => Array
  172. (
  173. [0] => Array
  174. (
  175. [id] => 9
  176. [pid] => 7
  177. [name] => 西大直街
  178. [son] => Array
  179. (
  180. [0] => Array
  181. (
  182. [id] => 11
  183. [pid] => 9
  184. [name] =>
  185. 哈尔滨工业大学
  186. )
  187. )
  188. )
  189. )
  190. )
  191. )
  192. )
  193. [1] => Array
  194. (
  195. [id] => 5
  196. [pid] => 2
  197. [name] => 鸡西市
  198. )
  199. )
  200. )
  201. )*/
复制代码


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

See all articles