用PHP实现多级树
我有一张文件夹表 我们不知道数组的深度,首先我尝试获取parentid为0的所有文件夹,然后再次调用foreach中的相同函数,以便迭代每个文件夹。下面是虚拟表格用PHP实现多级树,php,foreach,tree,Php,Foreach,Tree,我有一张文件夹表 我们不知道数组的深度,首先我尝试获取parentid为0的所有文件夹,然后再次调用foreach中的相同函数,以便迭代每个文件夹。下面是虚拟表格 Id parentid label -- -------- ------ 1 0 ABC 2 1 XYZ 3 2 ABC2 4 0 DUMMY 我正在尝试使用以下代码创建树: public function ge
Id parentid label
-- -------- ------
1 0 ABC
2 1 XYZ
3 2 ABC2
4 0 DUMMY
我正在尝试使用以下代码创建树:
public function getFolder($parentId = null)
{
if(IS_NULL($parentId)){
$parentId = 0;
}
$folders = Connection::queryBuilder()->select('f.id,f.parentid,f.label')
->from('folders','f')
->where('parentid='.$parentId)->execute()->fetchAll(PDO::FETCH_OBJ);
$temp = array();
foreach($folders as $folder){
$subfolders = self::getFolder($folder->id,$temp);
array_push($temp,$folder,$subfolders);
}
return $temp;
}
但是我没有得到我想要的数组。有人能帮我吗?提前感谢有一个非常接近的问题:
#/usr/bin/env-php
我猜你的意思是,“但我没有得到我想要的数组”请包括getReportDocumentsByFolder的代码。你能给出一个示例数组,说明你希望最终数组的结构是什么样的吗?@trincot抱歉,我在这里更改了名称getReportDocumentsByFolder与getFolder相同。我试着在这里把它叫做递归你可以通过点击编辑链接来修正你原来的问题这很好,我不明白为什么有人会投反对票。当然,你需要做一些调整来适应你的情况。是你干的吗?或者您只是复制粘贴并运行??更新查询以按parentid DESC排序结果。然后使用my foreach迭代将$data更改为$folders和对象属性。它必须起作用;)
#!/usr/bin/env php
<?php
// ordered by parent
$src = array(
['cid'=>'1','name'=>'Rootcat','parent'=>'0'],
['cid'=>'3','name'=>'dddd','parent'=>'1'],
['cid'=>'4','name'=>'test1','parent'=>'3'],
['cid'=>'5','name'=>'Test123 rec','parent'=>'3'],
['cid'=>'6','name'=>'abceg','parent'=>'3'],
['cid'=>'7','name'=>'JHGSGF','parent'=>'5'],
);
// inverse array, better take it sorted by parent_id desc
$data = array_reverse($src,false);
$for_parent = [];
foreach($data as $rec) {
if (isset($for_parent[$rec['cid']])) {
$rec['sub'] = $for_parent[$rec['cid']];
unset($for_parent[$rec['cid']]);
}
$for_parent[$rec['parent']] [$rec['cid']]= $rec;
}
print_r($for_parent);