Baumdaten werden häufig in der Entwicklung verwendet, beispielsweise eine unendliche mehrstufige Klassifizierung, die eine typische Baumstruktur darstellt. Der Algorithmus hier verwendet rekursives Denken. Um den Entwicklungsprozess zu vereinfachen, habe ich ein Tool zur Verbesserung der Entwicklungseffizienz geschrieben.
Es ist PHPTree.
Git-Adresse: https://git.oschina.net/jiusem/PHPTree.git
oder von Script Home http://www.jb51.net/codes/606002 herunterladen
Das einfachste Beispiel:
<?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); ?>
Ausgabe:
[
> „id ": 1,
"name": "book",
"parent_id": 0,
"expanded": false, //Untergeordnete Knoten nicht erweitern
"children": [
"erweitert": Falsch,
"Kinder": [
"Eltern_ID": 3,
"Blatt": True
}
]
Musik ",
„parent_id“: 0,
„leaf“: true
„leaf“ }
]
Die generierten Daten sind eine Baumstruktur, die sein kann Wird in Verbindung mit Front-End-Frameworks wie ExtJS verwendet. Git enthält eine Demo von ExtJS, auf die Sie verweisen können.
Demonstration:
Wenn Sie kein Front-End-Framework verwenden und nur die HTML-Ausgabe verwenden müssen, können Sie die folgende Methode verwenden:
$r = PHPTree::makeTreeForHtml($data);
Erhalten Sie ein eindimensionales Array und verwenden Sie das Ebenenfeld, um die Klassifizierungsebene zu identifizieren:
Ausgabe als Select-Tag:
Demo:
array( array( 'id'=>1, 'name'=>'用户管理', 'parent_id'=>0, 'level'=>0 //一级分类 ), array( 'id'=>1, 'name'=>'用户列表', 'parent_id'=>1, 'level'=>1 //二级分类 ) .... );
echo '<h1>PHPTree树形结构</h1>'; echo '<select style="width:300px;">'; foreach($r as $item){ echo '<option>'; //根据所在的层次缩进 echo str_repeat('......',$item['level']); echo $item['name']; echo '</option>'; } echo '</select>';
PHPTree::makeTree( $data, array( 'expanded' => true ));
输出的数据为:
[
{
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' ));
输出的数据为:
[
{
order_id:1,
name:'book1',
pid:0,
...
}
]
makeTreeForHtml 方法也支持配置主键和父键。
还有其他字段也可以自定义,但下面这些参数仅支持 makeTree 方法:
$r = PHPTree::makeTree($data, array( 'expanded_key' => 'expanded', 'children_key' => 'children', 'leaf_key' => 'leaf' ));
默认,这些字段的配置都是以ExtJS为参考的,如果你使用zTree框架的话,这些字段就需要重新配置了。
zTree 是一款强大的国产树形框架,它还支持 简单JSON格式,是一维数据格式,实际上就不需要用到PHPTree了。当然,PHPTree输出的数据层次感清晰,zTree也是支持的。
相关推荐:
Das obige ist der detaillierte Inhalt vonPHPTree – PHP generiert schnell unbegrenzte Klassifizierungen_php-Fähigkeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!