Este artículo lo guiará a través de un método para recuperar todos los nodos secundarios y descendientes para un padre específico que usa PHP con resultados de consultas MySQL. Esta técnica elimina la necesidad de construir una matriz multidimensional de la estructura de árbol y le permite obtener todos los nodos directamente.
Considere una tabla MySQL organizada como una lista de adyacencia, donde los datos de la jerarquía se representan con columnas para id, nombre y parent_id. La siguiente consulta SQL puede recuperar todas las filas de esta tabla en una matriz asociativa:
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
Supongamos que queremos filtrar esta matriz para nodos bajo un padre con ID 3, incluido el padre mismo. Esta función fetch_recursive personalizada puede lograr esto:
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; }
Para usar esta función, pase la matriz $data obtenida de la consulta como primer argumento y la identificación del padre del que desea recuperar los nodos secundarios como segundo argumento:
$list = fetch_recursive($data, 3);
$list ahora contendrá una matriz asociativa con todos los nodos secundarios y el nodo principal (id 3) incluido.
Esta solución recupera eficientemente todos los nodos secundarios y descendientes de un padre específico sin la necesidad de construir una estructura de árbol multidimensional.
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