Tôi đã xem xét trên Internet và không tìm thấy những gì tôi đang tìm kiếm. Tôi có một mảng phẳng với mỗi phần tử chứa 'id' và 'parent_id'. Mỗi phần tử sẽ chỉ có MỘT phụ huynh, nhưng có thể có nhiều trẻ em. Nếu parent_id = 0, nó được coi là một mục cấp độ gốc. Tôi đang cố gắng để có được mảng phẳng của tôi vào một cái cây. Các mẫu khác tôi đã tìm thấy chỉ sao chép phần tử vào phần tử gốc, nhưng bản gốc vẫn tồn tại.Tạo một cây từ một mảng phẳng trong PHP
EDIT
Mỗi phần tử của mảng bắt đầu được đọc từ một tập tin XML riêng biệt. Bản thân tệp sẽ có '0' làm giá trị cho parent_id nếu nó không có cha mẹ. Các phím thực sự là dây.
Tôi xin lỗi vì sự nhầm lẫn trước đó. Hy vọng rằng đây là rõ ràng hơn:
/EDIT
mảng khởi đầu của tôi:
Array ( [_319_] => Array ( [id] => 0 [parent_id] => 0 ) [_320_] => Array ( [id] => _320_ [parent_id] => 0 ) [_321_] => Array ( [id] => _321_ [parent_id] => _320_ ) [_322_] => Array ( [id] => _322_ [parent_id] => _321_ ) [_323_] => Array ( [id] => _323_ [parent_id] => 0 ) [_324_] => Array ( [id] => _324_ [parent_id] => _323_ ) [_325_] => Array ( [id] => _325_ [parent_id] => _320_ ) )
Mảng kết quả sau khi cây được thực hiện:
Array ( [_319_] => Array ( [id] => _319_ [parent_id] => 0 ) [_320_] => Array ( [id] => _320_ [parent_id] => 0 [children] => Array ( [_321_] => Array ( [id] => _321_ [parent_id] => _320_ [children] => Array ( [_322_] => Array ( [id] => _322_ [parent_id] => _321_ ) ) ) [_325_] => Array ( [id] => _325_ [parent_id] => _320_ ) ) [_323_] => Array ( [id] => _323_ [parent_id] => 0 [children] => Array ( [_324_] => Array ( [id] => _324_ [parent_id] => _323_ ) ) )
Bất kỳ sự giúp đỡ/hướng dẫn là đánh giá cao!
Một số mã tôi có cho đến nay:
function buildTree(array &$elements, $parentId = 0) { $branch = array(); foreach ($elements as $element) { if ($element['parent_id'] == $parentId) { $children = $this->buildTree($elements, $element['id']); if ($children) { $element['children'] = $children; } $branch[] = $element; } } return $branch; }
Tôi đang bối rối. Bạn chỉ yêu cầu chúng tôi viết mã mà có mảng nắm tay của bạn và phun ra những gì bạn có trong mảng thứ hai? – MetalFrog
Vâng ... câu hỏi ở đây là gì? –
Tóm lại, tôi đoán vậy. Tôi đã xem xét nhiều ví dụ khác ở đây về stackoverflow và trên các blog/diễn đàn khác. Nhưng khi tôi đã thử họ, họ không làm việc. – DSkinner