采用递归将数据列表转换成树
$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
}
]
}
]
}
]