采用递归将数据列表转换成树
$list = [ ["id" => 1, "name" => "头条", "parent_id" => 0], ["id" => 2, "name" => "快讯", "parent_id" => 0], ["id" => 3, "name" => "情感", "parent_id" => 2], ["id" => 4, "name" => "成人", "parent_id" => 3] ];
/** * 采用递归将数据列表转换成树 * * @param $dataArr 数据列表 * @param int $rootId 根节点ID * @param string $pkName 主键名 * @param string $pIdName 父节点id名 * @param string $childName 子节点名称 * @return array */ function ListToTreeRecursive($dataArr, $rootId = 0, $pkName = 'id', $pIdName = 'parent_id', $childName = 'children') { $arr = []; foreach ($dataArr as $sorData) { if ($sorData[$pIdName] == $rootId) { $children = ListToTreeRecursive($dataArr, $sorData[$pkName]); if($children){ $sorData[$childName] = $children; } $arr[] = $sorData; } } return $arr; } $tree = ListToTreeRecursive($list); echo json_encode($tree, JSON_UNESCAPED_UNICODE);
[ { "id":1, "name":"头条", "parent_id":0 }, { "id":2, "name":"快讯", "parent_id":0, "children":[ { "id":3, "name":"情感", "parent_id":2, "children":[ { "id":4, "name":"成人", "parent_id":3 } ] } ] } ]
参考
PHP List数据集/数组转换成树状结构Tree