[转载]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>";

posted on   小馬過河﹎  阅读(73)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示