· 7 years ago · Feb 12, 2019, 10:38 PM
1CREATE TABLE IF NOT EXISTS `tbl_category` (
2 `id` int(6) NOT NULL auto_increment,
3 `parent_id` int(4) NOT NULL default '0',
4 `name` varchar(255) NOT NULL,
5 PRIMARY KEY (`id`),
6 KEY `parent_id` (`parent_id`)
7) ENGINE=MyISAM DEFAULT CHARSET=utf8;
8
9
10INSERT INTO `tbl_category` (`id`, `parent_id`, `name`) VALUES
11(1, 0, 'Category 1'),
12(2, 0, 'Category 2'),
13(3, 0, 'Category 3'),
14(4, 1, 'Category 1. 1'),
15(5, 1, 'Category 1. 2'),
16(6, 1, 'Category 1. 3'),
17(7, 4, 'Category 1. 1. 1'),
18(8, 4, 'Category 1. 1. 2'),
19(9, 4, 'Category 1. 1. 3');
20
21$arrCategories = array(
22 array("id" => 1, "parent_id" => 0, "name" => "Category 1", "children" => array()
23 array("id" => 4, "parent_id" => 1, "name" => "Category 1. 1", "children" => array()
24 array("id" => 7, "parent_id" => 4, "name" => "Category 1. 1. 1", "children" => array()),
25 array("id" => 8, "parent_id" => 4, "name" => "Category 1. 1. 2", "children" => array()),
26 array("id" => 9, "parent_id" => 4, "name" => "Category 1. 1. 3", "children" => array())
27 ),
28 array("id" => 5, "parent_id" => 1, "name" => "Category 1. 2", "children" => array()),
29 array("id" => 6, "parent_id" => 1, "name" => "Category 1. 3", "children" => array())
30 ),
31 array("id" => 2, "parent_id" => 0, "name" => "Category 2", "children" => array()),
32 array("id" => 3, "parent_id" => 0, "name" => "Category 3", "children" => array())
33);
34
35Array
36(
37 [id] => 1
38 [parent_id] => 0
39 [name] => Category 1
40 [children] => Array
41 (
42 [4] => Array
43 (
44 [id] => 4
45 [parent_id] => 1
46 [name] => Category 1. 1
47 [children] => Array
48 (
49 [7] => Array
50 (
51 [id] => 7
52 [parent_id] => 4
53 [name] => Category 1. 1. 1
54 [children] => Array
55 (
56 )
57
58 )
59
60 [8] => Array
61 (
62 [id] => 8
63 [parent_id] => 4
64 [name] => Category 1. 1. 2
65 [children] => Array
66 (
67 )
68
69 )
70
71 [9] => Array
72 (
73 [id] => 9
74 [parent_id] => 4
75 [name] => Category 1. 1. 3
76 [children] => Array
77 (
78 )
79
80 )
81
82 )
83
84 )
85
86 [5] => Array
87 (
88 [id] => 5
89 [parent_id] => 1
90 [name] => Category 1. 2
91 [children] => Array
92 (
93 )
94
95 )
96
97 [6] => Array
98 (
99 [id] => 6
100 [parent_id] => 1
101 [name] => Category 1. 3
102 [children] => Array
103 (
104 )
105
106 )
107
108 )
109
110)
111Array
112(
113 [id] => 2
114 [parent_id] => 0
115 [name] => Category 2
116 [children] => Array
117 (
118 )
119
120)
121Array
122(
123 [id] => 3
124 [parent_id] => 0
125 [name] => Category 3
126 [children] => Array
127 (
128 )
129
130)
131
132<ul>
133 <li>Category 1
134 <ul>
135 <li>Category 1. 1
136 <ul>
137 <li>Category 1. 1. 1</li>
138 <li>Category 1. 1. 2</li>
139 <li>Category 1. 1. 3</li>
140 </ul>
141 </li>
142 <li>Category 1. 2</li>
143 <li>Category 1. 3</li>
144 </ul>
145 </li>
146 <li>Category 2</li>
147 <li>Category 3</li>
148</ul>
149
150<?php
151echo " <ul>n";
152foreach ($categories as $category) {
153echo " <li>".$category['ad'];
154
155if ($category['children']) {
156echo " <ul>n";
157foreach ($category['children'] as $child) {
158echo " <li>".$child['ad']."</li>n";
159}
160echo " </ul>n";
161}
162echo " </li>n";
163}
164echo " </ul>n";
165?>
166
167<ul>
168 <li>Category 1
169 <ul>
170 <li>Category 1. 1
171 <ul>
172 <li>Category 1. 1. 1</li>
173 </ul>
174 <ul>
175 <li>Category 1. 1. 2</li>
176 </ul>
177 <ul>
178 <li>Category 1. 1. 3</li>
179 </ul>
180 </li>
181 </ul>
182
183 <ul>
184 <li>Category 1. 2</li>
185 </ul>
186
187 <ul>
188 <li>Category 1. 3</li>
189 </ul>
190 </li>
191</ul>
192
193<ul>
194 <li>Category 2</li>
195</ul>
196
197<ul>
198 <li>Category 3</li>
199</ul>
200
201<ul>
202 <li>Category 1
203 <ul>
204 <li>Category 1. 1
205 <ul>
206 <li>Category 1. 1. 1</li>
207 <li>Category 1. 1. 2</li>
208 <li>Category 1. 1. 3</li>
209 </ul>
210 </li>
211 <li>Category 1. 2</li>
212 <li>Category 1. 3</li>
213 </ul>
214 </li>
215 <li>Category 2</li>
216 <li>Category 3</li>
217</ul>
218
219function printMenu($array){
220 foreach($array as $item){
221 if(is_array($item) && isset($item['name'])){
222 echo "<ul>n";
223
224 if(is_array($item['children'])){
225 echo "<li>".$item['name'];
226 printMenu($item);
227 echo "</li>n";
228 } else {
229 echo "<li>".$item['name']."</li>n";
230 }
231
232 echo "</ul>nn";
233 }
234 }
235}
236
237$db = new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
238
239
240function printMenu($array){
241 foreach($array as $item){
242 if(is_array($item) && isset($item['name'])){
243 echo "<ul>n";
244 if(getChildren($item['id'], false)){
245 echo "<li>".$item['name'];
246 printMenu(getChildren($item['id'], true));
247 echo "</li>n";
248 } else {
249 echo "<li>".$item['name']."</li>n";
250 }
251
252 echo "</ul>nn";
253 }
254 }
255}
256
257function getChildren($id, $return = false){
258 global $db;
259 $stmt = $db->prepare("SELECT * FROM `tbl_category` WHERE `parent_id` = :parent_id");
260 $stmt->execute(array(':parent_id' => $id));
261 $num = $stmt->rowCount();
262 if($num){
263 if($return){
264 $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
265 return $row;
266 }
267 return true;
268 }
269 return false;
270}
271
272
273$query = "SELECT * FROM `tbl_category` WHERE `parent_id` = 0";
274$stmt = $db->query($query);
275$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
276printMenu($row);