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

墨辰丷
Libérer: 2023-03-26 14:42:01
original
1800 Les gens l'ont consulté

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));
Copier après la connexion

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=>[&#39;id&#39;=>1,&#39;name&#39;=>&#39;父1&#39;,&#39;father&#39;=>0],
  1=>[&#39;id&#39;=>2,&#39;name&#39;=>&#39;父2&#39;,&#39;father&#39;=>0],
  2=>[&#39;id&#39;=>3,&#39;name&#39;=>&#39;父3&#39;,&#39;father&#39;=>0],
  3=>[&#39;id&#39;=>4,&#39;name&#39;=>&#39;儿1-1&#39;,&#39;father&#39;=>1],
  4=>[&#39;id&#39;=>5,&#39;name&#39;=>&#39;儿1-2&#39;,&#39;father&#39;=>1],
  5=>[&#39;id&#39;=>6,&#39;name&#39;=>&#39;儿1-3&#39;,&#39;father&#39;=>1],
  6=>[&#39;id&#39;=>7,&#39;name&#39;=>&#39;儿2-1&#39;,&#39;father&#39;=>2],
  7=>[&#39;id&#39;=>8,&#39;name&#39;=>&#39;儿2-1&#39;,&#39;father&#39;=>2],
  8=>[&#39;id&#39;=>9,&#39;name&#39;=>&#39;儿3-1&#39;,&#39;father&#39;=>3],
  9=>[&#39;id&#39;=>10,&#39;name&#39;=>&#39;儿3-1-1&#39;,&#39;father&#39;=>9],
  10=>[&#39;id&#39;=>11,&#39;name&#39;=>&#39;儿1-1-1&#39;,&#39;father&#39;=>4],
  11=>[&#39;id&#39;=>12,&#39;name&#39;=>&#39;儿2-1-1&#39;,&#39;father&#39;=>7],
];
function generateTree($arr,$id,$step){
  static $tree=[];
  foreach($arr as $key=>$val) {
    if($val[&#39;father&#39;] == $id) {
      $flg = str_repeat(&#39;└―&#39;,$step);
      $val[&#39;name&#39;] = $flg.$val[&#39;name&#39;];
      $tree[] = $val;
      generateTree($arr , $val[&#39;id&#39;] ,$step+1);
    }
  }
  return $tree;
}
$tree = generateTree($arr,0,0);
foreach ($tree as $val){
  echo $val[&#39;name&#39;].&#39;<br>&#39;;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal