What are the best practices for organizing and structuring parent and child nodes in a dynamic menu using PHP?

When organizing and structuring parent and child nodes in a dynamic menu using PHP, it is important to use a recursive function to loop through the menu items and their children. Each menu item should have an ID and a parent ID to establish the hierarchy. By recursively building the menu structure, you can easily display nested menu items in a user-friendly manner.

function buildMenu($menuItems, $parentId = 0) {
    $html = '<ul>';
    
    foreach ($menuItems as $menuItem) {
        if ($menuItem['parent_id'] == $parentId) {
            $html .= '<li>' . $menuItem['name'];
            
            // Check if the current menu item has children
            $children = array_filter($menuItems, function($item) use ($menuItem) {
                return $item['parent_id'] == $menuItem['id'];
            });
            
            if (!empty($children)) {
                $html .= buildMenu($menuItems, $menuItem['id']);
            }
            
            $html .= '</li>';
        }
    }
    
    $html .= '</ul>';
    
    return $html;
}

// Example usage
$menuItems = [
    ['id' => 1, 'parent_id' => 0, 'name' => 'Home'],
    ['id' => 2, 'parent_id' => 0, 'name' => 'About'],
    ['id' => 3, 'parent_id' => 0, 'name' => 'Services'],
    ['id' => 4, 'parent_id' => 2, 'name' => 'Team'],
    ['id' => 5, 'parent_id' => 2, 'name' => 'History'],
    ['id' => 6, 'parent_id' => 3, 'name' => 'Web Design'],
    ['id' => 7, 'parent_id' => 3, 'name' => 'SEO']
];

echo buildMenu($menuItems);