PHP 将扁平的数据转为树形数据

本文展示了如何将原始的数据结构转换为树形结构,重点在于活动管理模块的层级关系,包括驾驶舱、活动管理、创建活动、活动列表和缴费证明管理。通过generateTree()函数,清晰地呈现了各个子模块的层级关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原数据

array(6) {
  [0] => array(3) {
    ["id"] => int(13)
    ["name"] => string(12) "活动管理"
    ["pid"] => int(2)
  }
  [1] => array(3) {
    ["id"] => int(1)
    ["name"] => string(9) "驾驶舱"
    ["pid"] => int(0)
  }
  [2] => array(3) {
    ["id"] => int(2)
    ["name"] => string(12) "活动管理"
    ["pid"] => int(0)
  }
  [3] => array(3) {
    ["id"] => int(3)
    ["name"] => string(12) "创建活动"
    ["pid"] => int(13)
  }
  [4] => array(3) {
    ["id"] => int(4)
    ["name"] => string(12) "活动列表"
    ["pid"] => int(13)
  }
  [5] => array(3) {
    ["id"] => int(5)
    ["name"] => string(18) "缴费证明管理"
    ["pid"] => int(2)
  }
}

调用  方法

    /**
     * 处理成树形结构数据
     * @param array $list  未处理列表
     * @param string $pk  主键名
     * @param string $pid  关联上级主键名
     * @param string $child  下级文件键名
     * @param int $root  一级主键参数
     * @return array
     */
    function generateTree($list, $pk = 'id', $pid = 'pid', $child = 'subordinate', $root = 0)
    {
        $tree = array();
        $packData = array();
        foreach ($list as $data) {
            $packData[$data[$pk]] = $data;
        }
        foreach ($packData as $key => $val) {
            if ($val[$pid] == $root) {
                $tree[] = &$packData[$key]; // 代表根节点
            } else {
                $packData[$val[$pid]][$child][] = &$packData[$key]; // 找到其父类
            }
        }
        return $tree;
    }

转换后的数据

array(2) {
  [0] => array(3) {
    ["id"] => int(1)
    ["name"] => string(9) "驾驶舱"
    ["pid"] => int(0)
  }
  [1] => array(4) {
    ["id"] => int(2)
    ["name"] => string(12) "活动管理"
    ["pid"] => int(0)
    ["subordinate"] => array(2) {
      [0] => array(4) {
        ["id"] => int(13)
        ["name"] => string(12) "活动管理"
        ["pid"] => int(2)
        ["subordinate"] => array(2) {
          [0] => array(3) {
            ["id"] => int(3)
            ["name"] => string(12) "创建活动"
            ["pid"] => int(13)
          }
          [1] => array(3) {
            ["id"] => int(4)
            ["name"] => string(12) "活动列表"
            ["pid"] => int(13)
          }
        }
      }
      [1] => array(3) {
        ["id"] => int(5)
        ["name"] => string(18) "缴费证明管理"
        ["pid"] => int(2)
      }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一一凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值