@dmyasnykov

Как сделать многоуровневое меню с сортировкой php?

Есть массив с категориями, не вложенные, все подряд идут.
Array
(
    [0] => Array
        (
            [category_id] => 62
            [name] => Категория 1
            [parent_id] => 0
            [sort_order] => 1
            [img] => img1.jpg
            [href] => google.com/1
        )

	[1] => Array
        (
            [category_id] => 64
            [name] => Подкатегория 1.1
            [parent_id] => 62
            [sort_order] => 2
            [img] => img2.jpg
            [href] => google.com/2
        )
    [1] => Array
        (
            [category_id] => 63
            [name] => Подкатегория 1.2
            [parent_id] => 62
            [sort_order] => 1
            [img] => img3.jpg
            [href] => google.com/3
        )

   
    [5] => Array
        (
            [category_id] => 71
            [name] => Категория 2
            [parent_id] => 0
            [sort_order] => 3
            [img] => img.4
            [href] => google.com/4
        )

    [6] => Array
        (
            [category_id] => 72
            [name] => Подкатегория 2.1
            [parent_id] => 71
            [sort_order] => 2
            [img] => img5.jpg
            [href] => google.com/5
        )

такого вида, всегда 2 уровня, возможно будет 3.

Нужно вывести с сортировкой
Категория 1
- подкатегория 1.1
- подкатегория 1.2
Категория 2
- подкатегория 2.1


Как сделал я
if ($manufacturer_categories) {
    foreach ($manufacturer_categories as $category) {

        if ($category['parent_id'] == 0) {
            $toplvl[] = $category;
        } else {
            $sublvl[] = $category;
        }

    }
    foreach ($toplvl as $tops) {
        echo $tops['name'];

        foreach ($sublvl as $subs) {
            echo '<ul>';
            if ($subs['parent_id'] == $tops['category_id']) {

                echo '<li>' .$subs['name'] . '</li>';

            }
            echo '</ul>';
        }

       }

}


1. не знаю как сделать сортировку
2. по моему 3 форича в данной ситуации перебор, можно написать гораздо компактнее
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
@gian_tiaga
Нужно использовать рекурсию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы