[转载]php递归生成树形结构(几种常见的数据结构)
版权声明:本文为CSDN博主「陈文焕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_23116221/article/details/109910846
pid找上级id
$array = array(
array('id' => 1, 'pid' => 0, 'n' => '河北省'),
array('id' => 2, 'pid' => 0, 'n' => '北京市'),
array('id' => 3, 'pid' => 1, 'n' => '邯郸市'),
array('id' => 4, 'pid' => 2, 'n' => '朝阳区'),
array('id' => 5, 'pid' => 2, 'n' => '通州区'),
array('id' => 6, 'pid' => 4, 'n' => '望京'),
array('id' => 7, 'pid' => 4, 'n' => '酒仙桥'),
array('id' => 8, 'pid' => 3, 'n' => '永年区'),
array('id' => 9, 'pid' => 1, 'n' => '武安市'),
array('id' => 10, 'pid' => 8, 'n' => '永年区镇'),
array('id' => 11, 'pid' => 0, 'n' => '上海市')
);
function getTree($array, $pid=0){
$tree = array();
foreach ($array as $key => $value) {
if ($value['pid'] == $pid) {
$value['children'] = getTree($array, $value['id']);
$tree[] = $value;
}
}
return $tree;
}
$list=getTree($array);
echo "<pre>";
print_r($list);
echo "</pre>";
第二种:bm规则(3,6,9,12…)
$array = array(
array('name' => '固定资产', 'bm' => '001'),
array('name' => '桌子', 'bm' => '001001'),
array('name' => '办公桌', 'bm' => '001001001'),
array('name' => '1米长办公桌', 'bm' => '001001001001'),
array('name' => '2米长办公桌', 'bm' => '001001001002'),
array('name' => '3米长办公桌', 'bm' => '001001001003'),
array('name' => '椅子', 'bm' => '001002'),
array('name' => '普通靠背椅', 'bm' => '001002001'),
array('name' => '塑料靠背椅', 'bm' => '001002002'),
array('name' => '空调', 'bm' => '001003'),
);
function getTree($array, $bm='001'){
$tree = array();
foreach ($array as $k => $v) {
$aaa = strpos($v['bm'], $bm);
$length = strlen($bm)+3;
if ($aaa == 0 && $aaa !== false && strlen($v['bm']) == $length ) {
$v['children'] = getTree($array, $v['bm']);
$tree[] = $v;
}
}
return $tree;
}
$list=getTree($array);
echo "<pre>";
print_r($list);
echo "</pre>";
第三种:点切割匹配
$array = array(
array('name' => '固定资产', 'bm' => '1.1'),
array('name' => '桌子', 'bm' => '1.1.1'),
array('name' => '办公桌', 'bm' => '1.1.1.1'),
array('name' => '1米长办公桌', 'bm' => '1.1.1.1.1'),
array('name' => '2米长办公桌', 'bm' => '1.1.1.1.2'),
array('name' => '3米长办公桌', 'bm' => '1.1.1.1.3'),
array('name' => '椅子', 'bm' => '1.1.2'),
array('name' => '普通靠背椅', 'bm' => '1.1.2.1'),
array('name' => '塑料靠背椅', 'bm' => '1.1.2.2'),
array('name' => '空调', 'bm' => '1.1.3'),
);
function getTree($data, $bm='1.1'){
$tree = array();
foreach ($data as $key => $value) {
$count1 = count(explode('.',$bm))+1;
$count2 = count(explode('.',$value['bm']));
if ($count1 == $count2 && strpos($value['bm'], $bm) === 0) {
$value['children'] = getTree($data, $value['bm']);
$tree[] = $value;
}
}
return $tree;
}
$list=getTree($array);
echo "<pre>";
print_r($list);
echo "</pre>";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具