«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно использовать рекурсию для создания вложенного дерева меню из базы данных с родительскими категориями?

Как можно использовать рекурсию для создания вложенного дерева меню из базы данных с родительскими категориями?

Опубликовано 7 ноября 2024 г.
Просматривать:558

How can recursion be used to generate a nested menu tree from a database with parent categories?

Рекурсия для создания дерева меню

В вашей ситуации у вас есть структура базы данных, в которой категории имеют «корневое» поле, указывающее их родительскую категорию . Желаемый вывод HTML включает вложенные списки, представляющие иерархию категорий. Для этого можно использовать рекурсивную функцию PHP.

Вот пример функции:

function recurse($categories, $parent = null, $level = 0) {
    $ret = '
    '; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '
  • ' . $category['name'] . '

    '; $ret .= $this->recurse($categories, $category['id'], $level 1); $ret .= '
  • '; } } return $ret . '
'; }

Эта функция предполагает, что корневые категории имеют поле root со значением null. Он перебирает категории, определяет дочерние категории на основе их «корневого» поля и создает HTML с использованием вложенных списков.

Чтобы использовать эту функцию:

  1. Запросите в базе данных многомерный массив категорий.
  2. Вызовите функцию рекурсии с массивом категорий и нулевым значением в качестве родительского параметра.
  3. Присвойте возвращаемое значение в переменную (например, $Tree).
  4. Отобразите переменную $Tree для отображения вложенного дерева меню.

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

function recurse($categories, $parent = null, $level = 0) {
    $ret = '
    '; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '
  • ' . $category['name'] . '

    '; $sub = $this->recurse($categories, $category['id'], $level 1); if ($sub != '
      ') { $ret .= $sub; } $ret .= '
    • '; } } return $ret . '
    '; }

    Эта измененная функция будет создавать списки только в том случае, если у категории есть хотя бы один дочерний элемент.

    Последний учебник Более>

    Изучайте китайский

    Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

    Copyright© 2022 湘ICP备2022001581号-3