Les données arborescentes sont souvent utilisées dans le développement, comme la classification infinie à plusieurs niveaux, qui est une structure arborescente typique. L'algorithme ici utilise la pensée récursive. Afin de simplifier le processus de développement, j'ai écrit un outil pour améliorer l'efficacité du développement. Les amis dans le besoin peuvent s'y référer
C'est PHPTree.
adresse git : https://git.oschina.net/jiusem/PHPTree.git
ou téléchargez depuis Script Home http://www.jb51.net/codes/606002 html. "identifiant ": 1,
"name": "book","parent_id": 0,
"expanded": false, //Ne pas développer les nœuds enfants" children": [
<?php require('PHPTree.class.php'); //原始数据, 从数据库读出 $data = array( array( 'id'=>1, 'name'=>'book', 'parent_id'=>0 ), array( 'id'=>2, 'name'=>'music', 'parent_id'=>0 ), array( 'id'=>3, 'name'=>'book1', 'parent_id'=>1 ), array( 'id'=>4, 'name'=>'book2', 'parent_id'=>3 ) ); $r = PHPTree::makeTree($data); echo json_encode($r); ?>
"Enfants": [
"Parent_id": 3,"Leaf": true
}]Démo : Git inclut une démo qui génère du HTML, à laquelle vous pouvez vous référer. Concernant la conception de la base de données, il vous suffit de vous assurer que les champs id et parent_id sont inclus. D'autres champs peuvent être ajoutés par vous-même sans affecter la génération de données. parent_id est l'ID parent. S'il s'agit d'une classification de premier niveau, définissez-le sur 0. Bien entendu, les champs sont également configurables. Veuillez continuer à lire, je vais vous présenter quelques méthodes d'utilisation avancées.musique ",
"parent_id": 0,
«leaf»: true
«leaf» }
]
Les données générées sont une structure arborescente, qui peut être utilisé en conjonction avec des frameworks front-end tels que ExtJS. Git contient une démo d'ExtJS, à laquelle vous pouvez vous référer.
Démonstration :
Si vous n'avez pas besoin d'utiliser un framework front-end et utilisez simplement la sortie HTML, vous pouvez utiliser la méthode suivante :
$r = PHPTree::makeTreeForHtml($data);
Obtenez un tableau unidimensionnel, utilisez le champ niveau pour identifier le niveau de classification :
Sortie en tant que balise de sélection :
Développez les nœuds enfants :
PHPTree::makeTree( $data, array( 'expanded' => true ));Copier après la connexion输出的数据为:
[
{
id:1,
name:'book1',
expanded:true,//展开子节点
children:[
...
]
}
]自定义主键和父键:
//数据库读出 $data = array( array( 'order_id'=>1, //主键 'name'=>'book1', 'pid'=>0, //父键 ... ) ); PHPTree::makeTree( $data, array( 'primary_key' => 'order_id', 'parent_key' => 'pid' ));Copier après la connexion输出的数据为:
[
{
order_id:1,
name:'book1',
pid:0,
...
}
]makeTreeForHtml 方法也支持配置主键和父键。
还有其他字段也可以自定义,但下面这些参数仅支持 makeTree 方法:
$r = PHPTree::makeTree($data, array( 'expanded_key' => 'expanded', 'children_key' => 'children', 'leaf_key' => 'leaf' ));Copier après la connexion默认,这些字段的配置都是以ExtJS为参考的,如果你使用zTree框架的话,这些字段就需要重新配置了。
zTree 是一款强大的国产树形框架,它还支持 简单JSON格式,是一维数据格式,实际上就不需要用到PHPTree了。当然,PHPTree输出的数据层次感清晰,zTree也是支持的。
相关推荐:
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!