我正在构建一个数据库驱动的导航,我需要一些帮助来构建我的数据结构。我对递归不是很有经验,但这很可能是这条路。数据库表有一个 id 列、一个 parent_id 列和一个 label 列。调用该方法的结果为我提供了数据结构。我的数据结构方式应导致以下结果:
- parent_id 为 0 的记录被假定为根元素。
- 如果存在一个子元素,则每个根元素都包含一个子元素数组,该子元素包含一个包含等于根元素 id 的 parent_id 的元素数组。
- 子项可能包含一个子项数组,其中包含的 parent_ids 等于直接子项(这将是递归点)
- 当存在包含不为 0 的 parent_id 的记录时,它会被添加到子元素的数组中。
以下是数据结构的外观:
$data = array(
'home' => array(
'id' => 1,
'parent_id' => 0,
'label' => 'Test',
'children' => array(
'immediatechild' => array(
'id' => 2,
'parent_id' => 1,
'label' => 'Test1',
'children' => array(
'grandchild' => array(
'id' => 3,
'parent_id' => 2,
'label' => 'Test12',
))
))
)
);
这是我在片刻之后想到的。它不正确,但它是我想要使用的,我想要一些帮助来修复它。
<?php
// should i pass records and parent_id? anything else?
function buildNav($data,$parent_id=0)
{
$finalData = array();
// if is array than loop
if(is_array($data)){
foreach($data as $record){
// not sure how/what to check here
if(isset($record['parent_id']) && ($record['parent_id'] !== $parent_id){
// what should i pass into the recursive call?
$finalData['children'][$record['label'][] = buildNav($record,$record['parent_id']);
}
}
} else {
$finalData[] = array(
'id' => $data['id'],
'parent_id' => $parent_id,
'label' => $data['label'],
)
}
return $finalData
}
谢谢您的帮助!