用id和pid数组实现为树形式的json数据

当后端给你的json数据不是树格式的,不能直接拿数据放在el-tree组件里使用,所以要把id和pid格式的数组转化为树格式的数据

不多说,只讲干货,直接上代码

function toTree(data) {
  let result = []
  if (!Array.isArray(data)) {
    return result
  }
  data.forEach(item => {
    delete item.children;
  });
  let map = {};
  data.forEach(item => {
    map[item.id] = item;
  });
  data.forEach(item => {
    let parent = map[item.pid];
    if (parent) {
      (parent.children || (parent.children = [])).push(item);
    } else {
      result.push(item);
    }
  });
  return result;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用递归方法来实现将无限分类的数据处理成树状结构,并输出为JSON。以下是一个简单的PHP代码示例: ```php <?php // 连接数据库 $pdo = new PDO("mysql:host=localhost;dbname=test", "username", "password"); // 查询数据 $sql = "SELECT id, name, pid FROM category"; $stmt = $pdo->prepare($sql); $stmt->execute(); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); // 处理数据 function buildTree($data, $pid = 0) { $tree = array(); foreach ($data as $item) { if ($item['pid'] == $pid) { $children = buildTree($data, $item['id']); if (!empty($children)) { $item['children'] = $children; } $tree[] = $item; } } return $tree; } // 输出JSON header('Content-type:application/json;charset=utf-8'); echo json_encode(buildTree($data)); ?> ``` 假设分类数据表名为`category`,字段包括`id`、`name`和`pid`,其中`pid`表示父级分类的ID。以上代码将从数据库中查询所有分类数据,然后使用`buildTree`函数递归处理数据成树状结构,最后输出为JSON。输出的JSON可能类似于以下示例: ```json [ { "id": 1, "name": "分类1", "pid": 0, "children": [ { "id": 2, "name": "子分类1", "pid": 1 }, { "id": 3, "name": "子分类2", "pid": 1 } ] }, { "id": 4, "name": "分类2", "pid": 0, "children": [ { "id": 5, "name": "子分类3", "pid": 4, "children": [ { "id": 6, "name": "子子分类1", "pid": 5 } ] } ] } ] ``` 其中,每个分类数据都包括`id`、`name`和`pid`三个字段,如果该分类有子分类,则还包括`children`字段,其值为一个数组,包含该分类的所有子分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端攻程狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值