What is the concept of recursion in PHP and how can it be applied to create nested category structures?

Recursion in PHP is a technique where a function calls itself in order to solve a problem that can be broken down into smaller, similar subproblems. This can be applied to create nested category structures by iterating through a hierarchical array of categories and subcategories, calling the function recursively for each subcategory to build a nested structure.

function buildCategoryTree($categories, $parent_id = 0) {
    $tree = array();
    
    foreach ($categories as $category) {
        if ($category['parent_id'] == $parent_id) {
            $children = buildCategoryTree($categories, $category['id']);
            
            if (!empty($children)) {
                $category['children'] = $children;
            }
            
            $tree[] = $category;
        }
    }
    
    return $tree;
}

// Example usage:
$categories = [
    ['id' => 1, 'parent_id' => 0, 'name' => 'Category 1'],
    ['id' => 2, 'parent_id' => 0, 'name' => 'Category 2'],
    ['id' => 3, 'parent_id' => 1, 'name' => 'Subcategory 1'],
    ['id' => 4, 'parent_id' => 1, 'name' => 'Subcategory 2'],
    ['id' => 5, 'parent_id' => 3, 'name' => 'Sub-subcategory 1'],
];

$nestedCategories = buildCategoryTree($categories);