Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 09.06.2009
Сообщений: 47

Реализация дерева категорий

04.09.2014, 14:25. Показов 2533. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
На просторах интеренета нашел функцию по реализации дерева категорий. Но при её разборе, так окончательно и не понял, как именно она работает.
Реализация самой функции находится здесь.
Меня интересует, каким именно образом в данном куске кода
PHP
1
2
3
foreach ($categories as &$category) {
        $map[$category['parent']]['subcategories'][] = &$category;
}
формириются вложенные массивы (разного уровня вложенности) в массиве
PHP
1
$map[0]['subcategories']
(например, в строке 269)? Понимаю, что это происходит при передаче по ссылке. Но каким образом они там появляются?
Заранее благодарен за ответ!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2014, 14:25
Ответы с готовыми решениями:

Обработка дерева категорий
Здравствуйте, есть таблица с категориями( ее структура на картинке ). Построить само дерево исходя из id и parent_id у меня...

Код для дерева категорий
Привет, есть такой код для дерева категорий INSERT INTO `categories` (`id`, `parent_id`, `name`) VALUES (1, 0, 'Раздел 1'), (2, 0,...

Проектирование структуры таблицы и фунция вывода дерева категорий
Здравствуйте! Есть необходимость отображать в древовидном виде структуру категорий определенных товаров на сайте интернет магазина....

5
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
04.09.2014, 17:16
Здесь имеет место не передача по ссылке, а связывание (а ссылка стоит (&) для того чтобы объекты не копировались, а использовались одни и теже).
0
0 / 0 / 0
Регистрация: 09.06.2009
Сообщений: 47
04.09.2014, 17:57  [ТС]
И каким образом данное "связывание" происходит, и на каком этапе? Не могли бы Вы рассказать об этом подробнее? Был бы очень признателен!
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
04.09.2014, 18:08
PHP
1
$category['subcategories'] = array();
Каждой категории добавляют по пустому массиву в котором должны быть подкатегории
PHP
1
$map[$category['parent']]['subcategories'][] = &$category;
Каждую категорию привязывают к родительской (кладут ссылку в массив подкатегорий родительской категории)

Вас может смутить что все делается через map, но это нужно для того чтобы у дерева был абсолютный корень (псевдо категория с id = 0)
0
04.09.2014, 19:56

Не по теме:

Цитата Сообщение от Vas-e-na Посмотреть сообщение
Здесь имеет место не передача по ссылке, а связывание
что-то подсказывает, что термин "связывание" в php не существует. Похожий существующий термин "позднее статическое связывание" здесь не причем. Здесь имеет место обычное присвоение ссылки...

0
0 / 0 / 0
Регистрация: 09.06.2009
Сообщений: 47
05.09.2014, 15:03  [ТС]
Как я понимаю, здесь какие-то разногласия в терминах - поэтому так и не совсем ясно, что все-таки на самом деле происходит.
Я немного переписал часть кода (ссылка). Здесь я сделал вывод массива $map на каждой итерации цикла. Не могли бы Вы мне обьяснить, как возникает вложенный массив (строка 813), например, в т.н. разделе с условным названием Parent => 2--------------------Category => 6 (строка 787) :
PHP
1
2
3
4
5
6
7
8
9
10
[0] => Array
            (
               [id] => 6
               [parent] => 2
               [name] => Subcategory F
               [subcategories] => Array
               (
               )
 
)
До этого момента все понятно, как происходит добавление элементов в массив $map[0]['subcategories']. Но за счет чего появляются вложенные массивы - уже как-то не очень ясно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2014, 15:03
Помогаю со студенческими работами здесь

Реализация заполнения бинарного дерева в ширину
Добрый день, есть такая задача Алгоритм нашел: Попытался написать код, но не пойму как в итоге получить само результирующее дерево?...

Выпадающее меню категорий, под категорий и под под категорий
Добрый день, прошу помощи Было так и всё работало, echo "<tr><td class=gray align=\"right\">Выбирите категорию :...

Удаление дерева категорий
Доброго времени суток всем, у меня возникла такая проблема: В БД у меня есть таблица категорий и подкатегорий (category) В ней...

Создание дерева категорий
Здравствуйте, хочу спросить. Мне нужно сделать программу, где есть некие товары в виде структуры. Я хочу сделать дерево категорий этих...

Рекурсия: формирование дерева категорий
Задача сформировать дерево категорий. Не могу додуматься, как создать рекурсию данного кода: for($i = 0; $i <...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru