首页 > 编程语言 >[转载]php递归生成树形结构(几种常见的数据结构)

[转载]php递归生成树形结构(几种常见的数据结构)

时间:2023-04-13 13:56:14浏览次数:48  
标签:数据结构 name bm pid 树形 array php id 1.1

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

标签:数据结构,name,bm,pid,树形,array,php,id,1.1
From: https://www.cnblogs.com/sunr/p/17314520.html

相关文章

  • go语言基础-基本数据结构
    0x00基本数据结构go语言中,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。0x00整型(int)整型分为以下两个大类:按长度分为:int8、int16、int32、int64对应的无符号整型:uint8、uint16、uint32、uint64。其中,uint8就是我们熟知的......
  • 4月12日数据结构,线索二叉树,哈夫曼树,哈夫曼编码
    线索二叉树与以往的二叉树略有不同,普通二叉树在访问到叶子结点的时候会返回,往往递归的效率并不高,有时还可能有栈溢出的风险,但是线索二叉树在访问到叶子结点的时候因为没有左右孩子,所以他左边存放他前驱的指针。右边存放后继的指针,是指从一个非线性结构变成了一个可以线性访问的的......
  • 数据结构-->设计循环队列(OJ)
    各位好友,今天我们着重讲解,如何设计出一个循环队列,以及一些大坑如何避免与规避 !!题目如下:本道OJ稍微有些复杂了。可以说,是前面几期的栈与队列的试金石 至于思路,在这里特别强调一下,千万别用--->链表去实现,因为贼恶心!!太难控制,以及不好操作比如,若用链表,那么你在找尾的时候贼难......
  • PHP上传大型视频文件到服务器,解决方案
    ​ PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此......
  • Thinkphp6 自定义命令创建类文件
    以创建控制器为例1、先通过think命令创建一个make文件,效果如下图:phpthinkmake:commandmake/MyController 2、修改上面创建的文件【MyController.php】<?phpdeclare(strict_types=1);namespaceapp\command\make;usethink\console\Command;usethink\cons......
  • 数据结构的重要性
     数据结构是计算机科学中非常重要的一部分,它提供了存储和组织数据的方法和技术。在计算机科学领域中,数据结构经常用于解决许多不同类型的问题,包括信息搜索、排序、过滤等。 使用正确的数据结构可以使算法更加有效和高效,并且可以节省大量的计算资源。例如,如果您需要在一个大型数......
  • PHP连接MYSQL数据库参数设置机器增删查改操作
     1.param.php <?phpsession_start();if(!$_SESSION["user"]->poststuno)exit('你的工号不正确');if($_SESSION["user"]->juese=='001')exit('未知错误,请联系管理员0001');$db_host_main="192.168.*.*";//主数......
  • 请封装⼀个⽅法,将以下树形数据转换成期望的格式
    转化前constlist=[{id:1},{pid:1,id:2},{id:3},{pid:3,id:4},{pid:4,id:5}]转化后[{id:1,children:[{pid:1,id:2}]},{id:3,children:[{pid:3,id:4,children:[{pid:4,id:5}]}]}]getChildren(arr,id){constres=[];//根据数据⼀致性,定义返回的......
  • php的TP框架保存数据报错: SQLSTATE[HY000]: General error: 1366 Incorrect string v
    这一般情况就是保存表情字符导致的字符长度问题原因可能: (需要改字符集为 utf8mb4 排序规则为utf8mb4_general_ci)1.数据表字段不是utf8mb42.项目目录下文件.env里配置mysql  CHARSET=utf8需要该为 CHARSET=utf8mb43.如果不存在.env文件,则可能是config目......
  • 康复训练の树形DP
    所有代码的开头头文件,宏定义和命名空间如下#include<bits/stdc++.h>#defineTptemplate<typenameTy>#defineTstemplate<typenameTy,typename...Ar>#definelllonglong#defineCIconstint#defineRIint#defineWwhile#definegcgetchar#definemax(x,y)......