Maison >développement back-end >tutoriel php >Explication détaillée de la classification de niveaux infinis à l'aide de PHP (itération + récursion)
Cet article présente principalement l'itération et la récursivité PHP pour obtenir une classification infinie en détail. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
La classification infinie est courante dans les situations de développement, cet article résume donc les choses courantes. algorithmes de classification de pôles infinis.
1. Implémentation d'itération de boucle
$arr = [ 1=>['id'=>1,'name'=>'父1','father'=>NULL], 2=>['id'=>2,'name'=>'父2','father'=>NULL], 3=>['id'=>3,'name'=>'父3','father'=>NULL], 4=>['id'=>4,'name'=>'儿1-1','father'=>1], 5=>['id'=>5,'name'=>'儿1-2','father'=>1], 6=>['id'=>6,'name'=>'儿1-3','father'=>1], 7=>['id'=>7,'name'=>'儿2-1','father'=>2], 8=>['id'=>8,'name'=>'儿2-1','father'=>2], 9=>['id'=>9,'name'=>'儿3-1','father'=>3], 10=>['id'=>10,'name'=>'儿3-1-1','father'=>9], 11=>['id'=>11,'name'=>'儿1-1-1','father'=>4], 12=>['id'=>12,'name'=>'儿2-1-1','father'=>7], ]; function generateTree($items){ $tree = array(); foreach($items as $item){ if(isset($items[$item['father']])){ $items[$item['father']]['son'][] = &$items[$item['id']]; }else{ $tree[] = &$items[$item['id']]; } } return $tree; } $tree = generateTree($arr); print_r(json_encode($tree));
Sortie :
Analyse :
Cet algorithme utilise l'itération de boucle pour générer la structure linéaire dans une structure arborescente en fonction de la relation parent-enfant.
Avantages : rapide et efficace.Inconvénients : la valeur clé du tableau doit être la même que la valeur id, ce qui n'est pas pratique pour récupérer des données (l'itération est également utilisée pour obtenir des données)2. Implémentation récursive$arr = [ 0=>['id'=>1,'name'=>'父1','father'=>0], 1=>['id'=>2,'name'=>'父2','father'=>0], 2=>['id'=>3,'name'=>'父3','father'=>0], 3=>['id'=>4,'name'=>'儿1-1','father'=>1], 4=>['id'=>5,'name'=>'儿1-2','father'=>1], 5=>['id'=>6,'name'=>'儿1-3','father'=>1], 6=>['id'=>7,'name'=>'儿2-1','father'=>2], 7=>['id'=>8,'name'=>'儿2-1','father'=>2], 8=>['id'=>9,'name'=>'儿3-1','father'=>3], 9=>['id'=>10,'name'=>'儿3-1-1','father'=>9], 10=>['id'=>11,'name'=>'儿1-1-1','father'=>4], 11=>['id'=>12,'name'=>'儿2-1-1','father'=>7], ]; function generateTree($arr,$id,$step){ static $tree=[]; foreach($arr as $key=>$val) { if($val['father'] == $id) { $flg = str_repeat('└―',$step); $val['name'] = $flg.$val['name']; $tree[] = $val; generateTree($arr , $val['id'] ,$step+1); } } return $tree; } $tree = generateTree($arr,0,0); foreach ($tree as $val){ echo $val['name'].'<br>'; }Sortie : Analyse : est utilisé récursif, la valeur clé et la valeur id du tableau peuvent être différentes, et enfin le tableau est généré dans une structure séquentielle Avantages : parcours pratique, recherche d'éléments parents et enfants Inconvénients : PHP n'est pas bon en récursivité, grande quantité de données Dans ces circonstances, l'efficacité sera considérablement réduiteRecommandations associées :
Classification PHP Infinite Extreme
Explication détaillée de l'exemple de classification PHP Infinitus
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!