首先来谈谈我对无限极的看法,就是对数据的多层级分类,如同参天大树一般,从主干,到枝干,再到叶子。
无限极实现的方法。主要有两种,一是递归,二是迭代。无限极一般有两种方式,一是往上查找,二是往下查找。
1.往上查找(族谱树)从某个节点开始向上寻找其父节点,再找父节点的父节点,直到找不到为止。按照这种寻找,形成的一个类似树状的结构,就叫做族谱树。2.往下查找(子孙树)与族谱树相反,从某个节点开始往下寻找其子节点,再找子节点的子节点,直到找不到为止。这样形成的树状结构,就叫做子孙树。
递归方式
1.往上查找我们先来一组数据
$Military = [
0 => [
'id' => 1,
'parant_id' => 0,
'heading' => '司令'
],
1 => [
'id' => 2,
'parant_id' => 0,
'heading' => '将官'
],
2 => [
'id' => 3,
'parant_id' => 1,
'heading' => '司令人名'
],
3 => [
'id' => 4,
'parant_id' => 0,
'heading' => '校官'
],
4 => [
'id' => 5,
'parant_id' => 2,
'heading' => '上将'
],
5 => [
'id' => 6,
'parant_id' => 4,
'heading' => '中校'
],
6 => [
'id' => 7,
'parant_id' => 5,
'heading' => '1号上将名字'
],
7 => [
'id' => 8,
'parant_id' => 4,
'heading' => '下校'
],
8 => [
'id' => 9,
'parant_id' => 6,
'heading' => '1号中校名字'
],
9 => [
'id' => 10,
'parant_id' => 7,
'heading' => '2号上将名字'
]
];
按照上文的介绍,对上面数据进行族谱树无限极分类,假设我们想要寻找1号上将名字
的族谱,先找到该条数据。
'id'=>7,'parent_id'=>5,'heading'=>'1号上将名字'
可以看出它的父节点的id,即parent_id = 5
,那么id = 5
的节点就是其父节点,由此找到上将:
'id' => 5,'parant_id' => 2,'heading' => '上将'
与上面类似,寻找id=2
的节点,依次向上寻找,找到1号上将名字
的族谱:1号上将名字->上将->将官
废话不多说,上示例代码 和 图解
function GetParent_id($data,$pid){
static $arr = [];
foreach($data as $key => $value){
if($value['id'] == $pid){
$arr[] = $value;
GetParent_id($data,$value['parant_id']);
}
}
return $arr;
}
$arr_parant = GetParent_id($Military,7);
得出数据
array(3) {
[0]=>
array(3) {
["id"]=>
int(7)
["parant_id"]=>
int(5)
["heading"]=>
string(16) "1号上将名字"
}
[1]=>
array(3) {
["id"]=>
int(5)
["parant_id"]=>
int(2)
["heading"]=>
string(6) "上将"
}
[2]=>
array(3) {
["id"]=>
int(2)
["parant_id"]=>
int(0)
["heading"]=>
string(6) "将官"
}
}
2.往下查找 同样直接上代码
function getChlidId($data,$id){
static $ids = [];
if($id == 0){
return error();
}
foreach($data as $key => $value){
if($id = $value['parant_id']){
$ids[] = $value;
getChlidId($data,$value['id']);
}
}
return $ids;
}
$arr_child = getChlidId($Military,2)
得出数据
array(3) {
[0]=>
array(3) {
["id"]=>
int(5)
["parant_id"]=>
int(2)
["heading"]=>
string(6) "上将"
}
[1]=>
array(3) {
["id"]=>
int(7)
["parant_id"]=>
int(5)
["heading"]=>
string(16) "1号上将名字"
}
[2]=>
array(3) {
["id"]=>
int(10)
["parant_id"]=>
int(7)
["heading"]=>
string(16) "2号上将名字"
}
}
本文为ctexthuang原创文章,转载请注明来自ctexthuang_blog