惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
A
About on SuperTechFans
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
量子位
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - 小馬過河﹎

一些有用的javascript函数 layui多文件上传表格 layui静态表格防止被内容撑开变形 php使用mysql-text字段存取json字符串 ThinkPHP3 系统常量__SELF__在生产模式(debug=false)下不更新 PHP将数据表里的两个字段映射成对象的键和值 普通表格table样式美化 PHP通用请求函数sendCurl 查看证书/apk指纹md5/sha1/sha256 php跨域 javascript使用正则表达式高亮关键字 博文阅读密码验证 - 博客园 PHP二维数组排序|PHP二维数组去重 textarea中禁止使用换行(回车) php json_encode 斜杠 反斜杠 转义处理 ThinkPHP获取当前url js获取url中的查询参数 layui多图片上传 ThinkPHP接收header自定义参数
[转载]php递归生成树形结构(几种常见的数据结构)
小馬過河﹎ · 2023-04-13 · via 博客园 - 小馬過河﹎

版权声明:本文为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>";