"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se puede utilizar la recursividad para generar un árbol de menú anidado a partir de una base de datos con categorías principales?

¿Cómo se puede utilizar la recursividad para generar un árbol de menú anidado a partir de una base de datos con categorías principales?

Publicado el 2024-11-07
Navegar:110

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

Recursión para la generación del árbol de menús

En su situación, tiene una estructura de base de datos donde las categorías tienen un campo 'raíz' que indica su categoría principal . La salida HTML que desea implica listas anidadas que representan la jerarquía de categorías. Para lograr esto, se puede emplear una función PHP recursiva.

Aquí hay una función de ejemplo:

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 . '
'; }

Esta función supone que las categorías raíz tienen un campo 'raíz' con un valor nulo. Itera a través de las categorías, identifica categorías secundarias según su campo 'raíz' y construye el HTML usando listas anidadas.

Para usar esta función:

  1. Consulta tu base de datos para obtener un matriz multidimensional de categorías.
  2. Llame a la función recursa con la matriz de categorías y nulo como parámetro principal.
  3. Asigne el valor devuelto a una variable (por ejemplo, $Tree).
  4. Haga eco de la variable $Tree para mostrar el árbol de menú anidado.

Opcionalmente, puede modificar la función para evitar listas vacías verificando si la categoría tiene categorías secundarias antes de crear la lista:

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 . '
    '; }

    Esta función modificada solo creará listas si la categoría tiene al menos un hijo.

    Último tutorial Más>

    Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

    Copyright© 2022 湘ICP备2022001581号-3