在生成多級樹狀數(shù)組之前拌汇,我們一般得到的數(shù)據(jù)結構如下
[{
"id": 6,
"parent_id": 5,
"name": "體育專題1",
"intro": "體育專題1111介紹",
}, {
"id": 5,
"parent_id": 4,
"name": "體育專題",
"intro": "體育專題介紹",
}, {
"id": 4,
"parent_id": 0,
"name": "體育",
"intro": "體育所有區(qū)塊",
}, {
"id": 3,
"parent_id": 1,
"name": "最視頻",
"intro": "最視頻介紹",
}, {
"id": 2,
"parent_id": 1,
"name": "輪播臺",
"intro": "首頁輪播臺介紹",
}, {
"id": 1,
"parent_id": 0,
"name": "首頁",
"intro": "首頁的所有區(qū)塊",
}]
我們需要根據(jù)其中的pid(parent_id)與id之間的關系,來將數(shù)數(shù)組轉成多級數(shù)組
首先考慮,如果使用遞歸棵红,遞歸執(zhí)行的條件是什么?或者反過來說咧栗,遞歸返回的條件是什么逆甜?
假設我們用上述數(shù)據(jù)的第一個元素pid是5,繼續(xù)找到id為5的數(shù)據(jù)找到第二個元素致板,第二個元素pid為4交煞,繼續(xù)找id為4的元素,id為4的元素pid為0斟或,說明找到了最后
所以代碼如下
$newData = $this->digui($data,0);
function digui($arr, $pid = 0)
{
$newArr = [];
foreach ($arr as $item) {
if ($pid == $item['parent_id']) {
$item['children'] = digui($arr, $item['id']);
$newArr [] = $item;
}
}
return $newArr;
}
$newData = $this->digui($data,0);
傳入的data中的元素,而其中的遞歸相當于找出當前被遍歷元素的所有后代元素(包括兒子元素孫子元素)萝挤。所以最后我們得到的數(shù)據(jù)結構如下
[{
"id": 4,
"parent_id": 0,
"name": "體育",
"intro": "體育所有區(qū)塊",
"created_at": 0,
"updated_at": 0,
"children": [{
"id": 7,
"parent_id": 4,
"name": "體育專題2",
"intro": "體育專題22222介紹",
"created_at": 0,
"updated_at": 0,
"children": []
}, {
"id": 5,
"parent_id": 4,
"name": "體育專題1",
"intro": "體育專題介紹",
"created_at": 0,
"updated_at": 0,
"children": [{
"id": 6,
"parent_id": 5,
"name": "體育專題1-1",
"intro": "體育專題1111介紹",
"created_at": 0,
"updated_at": 0,
"children": []
}]
}]
}, {
"id": 1,
"parent_id": 0,
"name": "首頁",
"intro": "首頁的所有區(qū)塊",
"created_at": 0,
"updated_at": 0,
"children": [{
"id": 3,
"parent_id": 1,
"name": "最視頻",
"intro": "最視頻介紹",
"created_at": 0,
"updated_at": 0,
"children": []
}, {
"id": 2,
"parent_id": 1,
"name": "輪播臺",
"intro": "首頁輪播臺介紹",
"created_at": 0,
"updated_at": 0,
"children": []
}]
}]