"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como a recursão pode ser usada para gerar uma árvore de menu aninhada a partir de um banco de dados com categorias pai?

Como a recursão pode ser usada para gerar uma árvore de menu aninhada a partir de um banco de dados com categorias pai?

Publicado em 2024-11-07
Navegar:251

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

Recursão para geração de árvore de menu

Na sua situação, você tem uma estrutura de banco de dados onde as categorias têm um campo 'raiz' indicando sua categoria pai . A saída HTML desejada envolve listas aninhadas que representam a hierarquia de categorias. Para conseguir isso, uma função PHP recursiva pode ser empregada.

Aqui está um exemplo de função:

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 função assume que as categorias raiz possuem um campo 'raiz' com um valor nulo. Ele itera pelas categorias, identifica categorias secundárias com base em seu campo 'raiz' e constrói o HTML usando listas aninhadas.

Para usar esta função:

  1. Consulte seu banco de dados para obter um array multidimensional de categorias.
  2. Chame a função recurse com o array de categorias e nulo como o parâmetro pai.
  3. Atribua o valor retornado a uma variável (por exemplo, $Tree).
  4. Echo a variável $Tree para exibir a árvore de menu aninhada.

Opcionalmente, você pode modificar a função para evitar listas vazias, verificando se a categoria tem categorias filhas antes de criar a 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 função modificada só criará listas se a categoria tiver pelo menos um filho.

    Tutorial mais recente Mais>

    Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

    Copyright© 2022 湘ICP备2022001581号-3