Este artigo irá guiá-lo através de um método para recuperar todos os nós filhos e descendentes para um pai especificado usando PHP com resultados de consulta MySQL. Esta técnica elimina a necessidade de construir um array multidimensional da estrutura em árvore e permite obter todos os nós diretamente.
Considere uma tabela MySQL organizada como uma lista de adjacências, onde os dados da hierarquia são representados com colunas para id, nome e parent_id. A seguinte consulta SQL pode recuperar todas as linhas desta tabela em um array associativo:
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
Vamos supor que queremos filtrar esse array para nós sob um pai com id 3, incluindo o próprio pai. Esta função fetch_recursive personalizada pode fazer isso:
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 função, passe o array $data obtido da consulta como o primeiro argumento e o ID do pai para o qual deseja recuperar os nós filhos como o segundo argumento:
$list = fetch_recursive($data, 3);
$list agora conterá um array associativo com todos os nós filhos e o nó pai (id 3) incluído.
Esta solução recupera com eficiência todos os nós filhos e descendentes de um pai especificado sem a necessidade de construção de estrutura de árvore multidimensional.
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