Bạn có thể lấy tất cả các loại cùng một lúc.
Giả sử bạn có một kết quả phẳng từ cơ sở dữ liệu, như thế này:
$categories = array(
array('id' => 1, 'parent' => 0, 'name' => 'Category A'),
array('id' => 2, 'parent' => 0, 'name' => 'Category B'),
array('id' => 3, 'parent' => 0, 'name' => 'Category C'),
array('id' => 4, 'parent' => 0, 'name' => 'Category D'),
array('id' => 5, 'parent' => 0, 'name' => 'Category E'),
array('id' => 6, 'parent' => 2, 'name' => 'Subcategory F'),
array('id' => 7, 'parent' => 2, 'name' => 'Subcategory G'),
array('id' => 8, 'parent' => 3, 'name' => 'Subcategory H'),
array('id' => 9, 'parent' => 4, 'name' => 'Subcategory I'),
array('id' => 10, 'parent' => 9, 'name' => 'Subcategory J'),
);
Bạn có thể tạo một hàm đơn giản mà biến rằng danh sách phẳng thành một cấu trúc, tốt nhất là bên trong một hàm. Tôi sử dụng pass-by-reference để chỉ có một mảng cho mỗi thể loại và không có nhiều bản sao của mảng cho một thể loại.
function categoriesToTree(&$categories) {
Bản đồ được sử dụng để tra cứu nhanh các danh mục. Ở đây, tôi cũng tạo ra một mảng giả cho mức "root".
$map = array(
0 => array('subcategories' => array())
);
Tôi đã thêm một trường, danh mục con khác vào từng mảng danh mục và thêm nó vào bản đồ.
foreach ($categories as &$category) {
$category['subcategories'] = array();
$map[$category['id']] = &$category;
}
Lặp lại từng danh mục, thêm chính nó vào danh sách danh mục phụ của phụ huynh. Tham chiếu quan trọng ở đây, nếu không các danh mục đã được thêm sẽ không được cập nhật khi có nhiều danh mục con hơn.
foreach ($categories as &$category) {
$map[$category['parent']]['subcategories'][] = &$category;
}
Cuối cùng, trả lại tiểu thể loại đó loại hình nộm mà tham khảo tất cả các cấp cao nhất categories._
return $map[0]['subcategories'];
}
Cách sử dụng:
$tree = categoriesToTree($categories);
Và đây là mã trong hành động trên Codepad.
Bạn có thể sử dụng lớp TreeNode cho mục đích này. Trong đó bạn có thể nhận được bất kỳ nút con nào và sau đó lặp lại thành con của nó. Tải xuống tại đây: http://asimishaq.com/resources/tree-data-structure-in-php –