Maison  >  Article  >  développement back-end  >  Explication détaillée de la classification de niveaux infinis à l'aide de PHP (itération + récursion)

Explication détaillée de la classification de niveaux infinis à l'aide de PHP (itération + récursion)

墨辰丷
墨辰丷original
2018-05-18 11:33:301752parcourir

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[&#39;name&#39;].&#39;<br>&#39;;
}

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éduite

Recommandations associées :

Méthode PHP pour implémenter un arbre de classification infini

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn