Как получить все разделы и подразделы?

Для того чтобы получить все разделы и подразделы, вам необходимо использовать рекурсивную функцию или алгоритм обхода дерева. В PHP вы можете использовать массивы или объекты для представления дерева разделов и подразделов.

Предположим, у вас есть следующие данные об разделах и подразделах в виде массива:

$categories = [
    [
        'id' => 1,
        'name' => 'Раздел 1',
        'children' => [
            [
                'id' => 2,
                'name' => 'Подраздел 1.1',
                'children' => [
                    [
                        'id' => 3,
                        'name' => 'Подраздел 1.1.1',
                        'children' => []
                    ],
                    [
                        'id' => 4,
                        'name' => 'Подраздел 1.1.2',
                        'children' => []
                    ]
                ]
            ],
            [
                'id' => 5,
                'name' => 'Подраздел 1.2',
                'children' => []
            ]
        ]
    ],
    [
        'id' => 6,
        'name' => 'Раздел 2',
        'children' => [
            [
                'id' => 7,
                'name' => 'Подраздел 2.1',
                'children' => []
            ],
            [
                'id' => 8,
                'name' => 'Подраздел 2.2',
                'children' => []
            ]
        ]
    ]
];

Теперь, чтобы получить все разделы и подразделы, можно использовать рекурсивную функцию. Вот пример такой функции:

function getCategories($categories)
{
    $result = [];

    foreach ($categories as $category) {
        $result[] = $category;

        if (!empty($category['children'])) {
            $result = array_merge($result, getCategories($category['children']));
        }
    }

    return $result;
}

Вызов этой функции с входными данными нашего примера вернет все разделы и подразделы:

$allCategories = getCategories($categories);
print_r($allCategories);

Результат выполнения будет:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Раздел 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => Подраздел 1.1
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => Подраздел 1.1.1
                                            [children] => Array
                                                (
                                                )
                                        )
                                    [1] => Array
                                        (
                                            [id] => 4
                                            [name] => Подраздел 1.1.2
                                            [children] => Array
                                                (
                                                )
                                        )
                                )
                        )
                    [1] => Array
                        (
                            [id] => 5
                            [name] => Подраздел 1.2
                            [children] => Array
                                (
                                )
                        )
                )
        )
    [1] => Array
        (
            [id] => 6
            [name] => Раздел 2
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 7
                            [name] => Подраздел 2.1
                            [children] => Array
                                (
                                )
                        )
                    [1] => Array
                        (
                            [id] => 8
                            [name] => Подраздел 2.2
                            [children] => Array
                                (
                                )
                        )
                )
        )
)

Как видите, функция рекурсивно обходит все вложенные уровни и возвращает массив со всеми разделами и подразделами.