php处理数据的问题?

比如下面的数据库的数据已经从数据库中拿到了,怎么处理成下面的形式,就是分级显示。

[
    {
        parentid:0,
        name:‘春树集团’,
        children:[{...}]
}
]

图片

阅读 1.2k
1 个回答

以下仅供参考

//test.php

<?php

$arr = [
    ["id" => 1, "parentid" => 0, "name" => "春树集团"],
    ["id" => 2, "parentid" => 0, "name" => "东控科技"],
    ["id" => 3, "parentid" => 1, "name" => "科研部"],
    ["id" => 4, "parentid" => 1, "name" => "科研部"],
    ["id" => 5, "parentid" => 3, "name" => "科研部-3-5"],
    ["id" => 6, "parentid" => 2, "name" => "666"],
];

//以 parentid 分组
$map = [];
foreach ($arr as $v) {
    $v["children"] = [];
    $map[$v["parentid"]][] = $v;
}

//默认根结点是0
//递归处理汇总数据
$res = $map[0];
foreach ($res as &$node) {
    dfs($node, $map);
}

var_dump($res);

function dfs(&$node, &$map) {
    if (!isset($map[$node["id"]])) {
        return;
    }
    $node["children"] = $map[$node["id"]];
    foreach ($node["children"] as &$child) {
        dfs($child, $map);
    }
}
$ php test.php
array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["parentid"]=>
    int(0)
    ["name"]=>
    string(12) "春树集团"
    ["children"]=>
    array(2) {
      [0]=>
      array(4) {
        ["id"]=>
        int(3)
        ["parentid"]=>
        int(1)
        ["name"]=>
        string(9) "科研部"
        ["children"]=>
        array(1) {
          [0]=>
          array(4) {
            ["id"]=>
            int(5)
            ["parentid"]=>
            int(3)
            ["name"]=>
            string(13) "科研部-3-5"
            ["children"]=>
            array(0) {
            }
          }
        }
      }
      [1]=>
      array(4) {
        ["id"]=>
        int(4)
        ["parentid"]=>
        int(1)
        ["name"]=>
        string(9) "科研部"
        ["children"]=>
        array(0) {
        }
      }
    }
  }
  [1]=>
  &array(4) {
    ["id"]=>
    int(2)
    ["parentid"]=>
    int(0)
    ["name"]=>
    string(12) "东控科技"
    ["children"]=>
    array(1) {
      [0]=>
      array(4) {
        ["id"]=>
        int(6)
        ["parentid"]=>
        int(2)
        ["name"]=>
        string(3) "666"
        ["children"]=>
        array(0) {
        }
      }
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进