PHP数组不确定层次数据的分层处理代码
*创建父树树数组
*参数
* AR数组,由邻接表组织的数据
*作为id数组中的主键或键连接。
*作为$键数组下标关联中的父键或键。
*返回多维数组
**
功能find_parent($ ar,$id = 'id',PID = 'pid美元){
foreach(AR美元美元美元美元T V V){ } } { $id = $ V;
foreach($ T $ K = $项){
如果(项目{ $ } }){
如果(!isset($ T { } } { $项美元{ 'parent PID'} { } } { $美元项目PID))
$ T { $ { } } {美元项目ID 'parent} { } } { $美元项目PID = $ T { } } { $ PID美元项目;
{ } { $ T $ K 'reference} =真;
}
}
返回$;
}
*创建子节点的树阵
*参数
* AR数组,由邻接表组织的数据
*作为id数组中的主键或键连接。
*作为$键数组下标关联中的父键或键。
*返回多维数组
**
功能find_child($ ar,$id = 'id',PID = 'pid美元){
foreach(AR美元美元美元美元T V V){ } } { $id = $ V;
foreach($ T $ K = $项){
如果(项目{ $ } }){
$ T { $ { } } {美元项目PID'孩子'} { } } { $美元项目ID = $ T { $ K };
{ } { $ T $ K 'reference} =真;
}
}
返回$;
}
实例:
复制代码代码如下所示:
数据=数组(
阵列('id' = > 1,'parent= > 0,'name' = > 'grandfather),
阵列('id' = > 2,'parent= > 1,'name' = >爸爸),
阵列('id' = > 3,'parent= > 1,'name' = >叔叔),
阵列('id' = > 4,'parent= > 2,'name' = > 'themselves),
阵列('id' = > 5,'parent= > 4,'name' = >孩子)
);
P = find_parent($数据,'id','parent);
C = find_child美元(美元数据,'id','parent);
上述两种方法都是根据id拆分为数组的所有节点,然后通过连接到父节点和子节点的引用平坦元素找到它们的父或子元素,
但是,在分割数组中仍然存在引用的元素,因此,在实际应用中,这些引用元素的最佳标记是为了避免将它们作为根遍历,从而导致复制。
复制代码代码如下所示:
foreach(P =美元美元美元关键项目){
如果($项{ 'reference ' })继续;
print_r($项);
}
foreach($ C键=美元美元项目){
如果($项{ 'reference ' })继续;
print_r($项);
}
递归方法,当删除PHP数组元素时,数组游标将返回为零。因此,遍历过程中发现的一些元素必须保留在数组中,不能减少后续元素的搜索范围。
复制代码代码如下所示:
mylist美元=数组(数组('parent_id= > 0,'id' = > 1),
阵列('parent_id= > 0,'id' = > 2),
阵列('parent_id= > 0,'id' = > 3),
阵列('parent_id= > 2,'id' = > 4),
阵列('parent_id= > 2,'id' = > 5),
阵列('parent_id= > 3,'id' = > 6),
阵列('parent_id= > 3,'id' = > 7),
阵列('parent_id= > 4,'id' = > 8),
阵列('parent_id= > 5,'id' = > 9),
阵列('parent_id= > 5,'id' = > 10)
);
功能_findchildren($列表,p_id美元){ / /分层数据,
数组();
foreach(美元美元美元列表ID = >项目){
如果($项{ 'parent_id} = = $ p_id){
长度=计数($ r);
美元长度= } = $项目;
如果($ T =美元-> _findchildren($列表,$项目{ 'id' })){
{ } { $ R $长孩子} = $ T;
}
}
}
返回$ r;
}
print_r(_findchildren(mylist美元,0));