@jekahm

Как работает функция по формированию дерева категорий?

Доброго времени суток!
На просторах интеренета нашел функцию по реализации дерева категорий. Но при её разборе, так окончательно и не понял, как именно она работает.
Реализация самой функции находится здесь.
Меня интересует, каким именно образом в данном куске кода
foreach ($categories as &$category) {
        $map[$category['parent']]['subcategories'][] = &$category;
    }

формириются вложенные массивы (разного уровня вложенности)? Понимаю, что это происходит при передаче по ссылке. НО каким образом они появляются?
Заранее благодарен за ответ!
  • Вопрос задан
  • 2353 просмотра
Пригласить эксперта
Ответы на вопрос 2
greabock
@greabock
Могу
в коде по предоставленной тобой ссылке, самый тонкий момент это :
$map[$category['parent']]['subcategories'][] = &$category;

на самом деле это тоже самое (короткий синтаксис), что
array_push(
    $map[$category['parent']]['subcategories'],
    &$category
);

$category['parent'] - это id категории. Допустим это 0.
То есть в массив $map[0]['subcategories'][0] будет добавлена ссылка на $categories[0]. Если попадется еще категория с таким же [parent],
То ссылка на нее будет записана в $map[0]['subcategories'][1].
Ну а так, как в строке,
$map[$category['id']] = &$category;
говорится что категория в карте ($map), ссылается на категорию в списке($categories). То они устанавливаются по ссылкам рекурсивно.
интерпритатор смотрит в subcategory - там ссылки, он смотрит в subcategory ссылок - там снова ссылки, и так, пока вложенность не достигнет конца.
Ответ написан
Комментировать
@jekahm Автор вопроса
TO greabock:
Не совсем понятно, каким именно образом вызывается данная рекурсия.
Здесь я сделал вывод массива $map на каждой итерации цикла. Не могли бы Вы мне обьяснить, как возникает вложенный массив, например, в т.н. разделе с условным названием Parent => 2--------------------Category => 6 (строка 787) :
[0] => Array
            (
               [id] => 6
               [parent] => 2
               [name] => Subcategory F
               [subcategories] => Array
               (
               )

            )

Может тогда на основе этого я смогу понять основной принцип
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 15:01
35000 руб./за проект
19 апр. 2024, в 14:12
30000 руб./за проект