"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 recupero todos los nodos secundarios, nietos y descendientes de un nodo principal utilizando PHP con resultados de consultas MySQL?

¿Cómo recupero todos los nodos secundarios, nietos y descendientes de un nodo principal utilizando PHP con resultados de consultas MySQL?

Publicado el 2024-11-17
Navegar:864

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

Obtener todos los nodos secundarios, nietos, etc. bajo padre usando PHP con resultados de consulta MySQL

Edición original:

Recuperar todos los nodos secundarios, nietos y descendientes posteriores asociados con un nodo principal es una tarea común cuando se trabaja con estructuras de datos jerárquicas. Este problema surge en escenarios donde las tablas de bases de datos emplean un modelo de lista de adyacencia para la organización de datos.

Enfoque mediante recursión:

Para abordar este problema, la recursividad demuestra ser una solución acercarse. Aquí hay una explicación detallada de cómo se puede emplear la recursividad para lograr este objetivo:

1. Establecer una función base:

Una función recursiva es aquella que recurre a sí misma para resolver un problema y se utiliza a menudo en escenarios que involucran estructuras de datos jerárquicas o anidadas. En este caso, nuestra función base se llamará fetch_recursive.

2. Identificación de los criterios para llamadas recursivas:

Dentro de fetch_recursive, dos condiciones principales determinan cuándo se realizan las llamadas recursivas:

  • Nodo principal encontrado: Cuando El nodo actual que se está evaluando es el nodo principal que nos interesa (según el ID proporcionado).
  • Nodo secundario Encontrado: Cuando el nodo actual tiene una ID principal que coincide con la ID del nodo principal.

3. Construyendo la matriz de resultados:

Cada vez que se realiza una llamada recursiva, la función completará una matriz de resultados con datos relevantes del nodo actual. Esta matriz crecerá de forma iterativa a medida que las llamadas recursivas atraviesen la estructura de árbol.

4. Búsqueda recursiva de nodos secundarios:

Si el nodo actual tiene nodos secundarios (identificados por la existencia de una propiedad secundaria), se realizará otra llamada recursiva para recuperar esos nodos secundarios. Este proceso continúa hasta que se capturan todos los nodos secundarios del nodo principal.

Funcionalidad adicional:

1. Manejo de nietos y descendientes:

La naturaleza recursiva de fetch_recursive garantiza que atravesará automáticamente la jerarquía y recuperará no solo los nodos secundarios sino también los nietos y los descendientes posteriores.

2 . Unificación de resultados:

Una vez completadas todas las llamadas recursivas, la función devuelve una matriz única y completa que contiene todos los nodos descendientes bajo el nodo principal especificado.

Implementación del 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 la función fetch_recursive, simplemente pase la matriz de datos original (en este caso, $data) y el ID del nodo desde el cual Quiero recuperar a los descendientes. Por ejemplo, para recuperar todos los nodos secundarios, nietos y descendientes del nodo 3:

$list = fetch_recursive($data, 3);

Esto completará la variable $list con una matriz que contiene todos los nodos relevantes.

Ú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