"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 recupero todos os nós filhos, netos e descendentes em um nó pai usando PHP com resultados de consulta MySQL?

Como recupero todos os nós filhos, netos e descendentes em um nó pai usando PHP com resultados de consulta MySQL?

Publicado em 17/11/2024
Navegar:265

How do I retrieve all child, grandchild, and descendant nodes under a parent node using PHP with MySQL query results?

Obtenha todos os nós filhos, netos, etc. sob o pai usando PHP com resultados de consulta MySQL

Problema original:

Recuperar todos os nós filhos, netos e descendentes subsequentes associados a um nó pai é uma tarefa comum ao trabalhar com estruturas de dados hierárquicas. Esse problema surge em cenários onde tabelas de banco de dados empregam um modelo de lista de adjacências para organização de dados.

Abordagem usando recursão:

Para resolver esse problema, a recursão prova ser uma forma eficaz abordagem. Aqui está uma explicação detalhada de como a recursão pode ser empregada para atingir esse objetivo:

1. Estabelecendo uma função base:

Uma função recursiva é aquela que recorre a si mesma para resolver um problema e é frequentemente usada em cenários que envolvem estruturas de dados hierárquicas ou aninhadas. Neste caso, nossa função base será denominada fetch_recursive.

2. Identificando os critérios para chamadas recursivas:

Em fetch_recursive, duas condições principais determinam quando as chamadas recursivas são feitas:

  • Nó pai encontrado: Quando o O nó atual que está sendo avaliado é o nó pai no qual estamos interessados ​​(com base no ID fornecido).
  • Nó filho encontrado: Quando o nó atual tem um ID pai que corresponde ao ID do nó pai .

3. Construindo a matriz de resultados:

Cada vez que uma chamada recursiva é feita, a função preencherá uma matriz de resultados com dados relevantes do nó atual. Essa matriz crescerá iterativamente à medida que as chamadas recursivas atravessam a estrutura em árvore.

4. Procurando recursivamente por nós filhos:

Se o nó atual tiver quaisquer nós filhos (identificados pela existência de uma propriedade filhos), outra chamada recursiva será feita para recuperar esses nós filhos. Esse processo continua até que todos os nós filhos do nó pai sejam capturados.

Funcionalidade adicional:

1. Tratamento de netos e descendentes:

A natureza recursiva de fetch_recursive garante que ele percorrerá automaticamente a hierarquia e recuperará não apenas nós filhos, mas também netos e descendentes subsequentes.

2 . Resultados unificadores:

Após a conclusão de todas as chamadas recursivas, a função retorna uma matriz única e abrangente contendo todos os nós descendentes no nó pai especificado.

Implementação de código:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}

Uso:

Para utilizar a função fetch_recursive, basta passar o array de dados original (neste caso, $data) e o ID do nó do qual você deseja recuperar os descendentes. Por exemplo, para recuperar todos os nós filhos, netos e descendentes no nó 3:

$list = fetch_recursive($data, 3);

Isso preencherá a variável $list com uma matriz contendo todos os nós relevantes.

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