Maison >cadre php >PensezPHP >Utiliser ThinkPHP6 pour implémenter une structure arborescente récursive

Utiliser ThinkPHP6 pour implémenter une structure arborescente récursive

王林
王林original
2023-06-20 14:48:101192parcourir

Avec le développement d'Internet, des affichages arborescents sont apparus dans divers sites Web et applications, tels que les annuaires de classification, les structures d'organisation du personnel, la gestion des autorisations, etc. Dans ces scénarios d’application, la structure arborescente récursive est devenue l’un des modèles les plus importants et les plus pratiques.

ThinkPHP6 est un framework de développement PHP basé sur le modèle MVC. Il possède une bibliothèque d'extensions riche et d'excellentes performances, et est largement reconnu et utilisé par les développeurs. Il est également devenu plus pratique d'implémenter des structures arborescentes récursives dans ThinkPHP6.

Ci-dessous, nous présenterons comment utiliser les fonctions récursives pour créer une arborescence dans ThinkPHP6.

1. Définir la structure de la base de données

Avant d'implémenter la structure arborescente récursive, vous devez d'abord savoir comment stocker les données dans la base de données afin que l'application puisse les traiter. Dans cet exemple, nous allons créer une table « catégorie » et stocker des informations telles que le nom de la catégorie, l'ID de catégorie, l'ID parent, etc. dans la table des catégories.

La structure de la table de classification est la suivante :

id int(11) clé primaire
name varchar(50) nom de la catégorie
parent_id int(11) ID de la catégorie parent

2 Implémenter la fonction récursive

Ensuite, nous avons besoin. pour implémenter une fonction de récursion utilisée pour interroger tous les nœuds enfants à partir du nœud racine. Dans ThinkPHP6, vous pouvez utiliser la méthode select combinée avec le paramètre $where pour interroger les colonnes spécifiées, par exemple :

Db::name('classification table')->where('parent_id',$id)-> select ();

Dans cet exemple, $id est le paramètre passé à la fonction récursive, indiquant l'ID du nœud actuel. La fonction récursive interrogera récursivement tous les nœuds enfants du nœud en fonction de l'ID.

Ce qui suit est l'implémentation de la fonction récursive :

function getChildren($id){
    //查询该节点下的所有子节点
    $children=Db::name('分类表')->where('parent_id',$id)->select();
    //如果没有子节点,返回空数组
    if(empty($children)){
        return $children;
    }
    //递归查询子节点的子节点,并将结果合并到$children数组中
    foreach($children as $k=>$v){
        $children[$k]['children']=$this->getChildren($v['id']);
    }
    return $children;
} 

Dans cette fonction, nous interrogeons d'abord tous les nœuds enfants sous ce nœud et enregistrons les résultats dans le tableau $children. Si le nœud n'a pas de nœud enfant, un tableau vide est renvoyé directement.

Ensuite, nous utilisons une boucle foreach pour parcourir chaque nœud enfant du tableau $children et appelons la fonction récursive pour interroger tous les nœuds enfants de ce nœud enfant. Fusionnez les résultats dans le tableau $children, pour finalement renvoyer l'intégralité du tableau $children.

3. Afficher la structure arborescente

Une fois que la fonction récursive a obtenu les informations du nœud et de tous ses nœuds enfants, nous devons les afficher sous forme d'arborescence. Ceci peut être réalisé en parcourant le tableau renvoyé par la fonction récursive et en produisant les symboles d'indentation correspondants en fonction de la profondeur de chaque nœud.

Voici le code pour générer la structure arborescente :

function outputTree($arr,$deep=0){
    //定义缩进符号
    $symbol='|--';
    $html='';
    
    foreach($arr as $v){
        //根据节点深度输出缩进符号
        $html.=str_repeat('       ',$deep).$symbol.$v['name'].'<br/>';
        //如果有子节点,继续遍历
        if(!empty($v['children'])){
            $html.=$this->outputTree($v['children'],$deep+1);
        }
    }
    
    return $html;
}

Dans cette fonction, nous définissons d'abord le symbole d'indentation, puis parcourons récursivement chaque nœud du tableau. Génère le nombre correspondant de symboles d’indentation en fonction de la profondeur du nœud actuel. Si un nœud a des nœuds enfants, continuez à parcourir de manière récursive tous les nœuds enfants du nœud.

Enfin, le code pour afficher l'intégralité de l'arborescence est le suivant :

$id=0;
$arr=$this->getChildren($id);
$html=$this->outputTree($arr);
echo $html;

Dans ce code, $id représente l'ID du nœud racine. Nous appelons d'abord la fonction récursive pour obtenir les informations de tous les nœuds enfants, puis. appelez la fonction qui génère la structure arborescente, affichez la structure arborescente entière sur la page HTML.

4. Résumé

En utilisant la riche bibliothèque d'extensions et les fonctions récursives de ThinkPHP6, nous pouvons facilement créer une structure arborescente récursive, rendant l'application plus facile à gérer et à utiliser. J'espère que cet article pourra vous aider dans votre travail de développement lors de la création d'une arborescence, vous permettant d'accomplir la tâche plus efficacement.

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