我有一个大约有300个项目的数组。每个项目有5个属性。某些项目具有父项目。嵌套项需要能够扩展到无限嵌套。
我需要组织数组,以便所有具有父项的项都在父项children
属性内。child
将具有children
我可以创建一个关联数组,使前两个级别。顶级父项及其子项。
现在,当我试图创建无限嵌套时,我的问题来了。我看不出有什么方法可以自动创建一个适应多个嵌套级别的方法,并将信息放在应该嵌套的地方。
我从来没有建造过这样的树,性能是至关重要的。有人能指导我如何实现我想要实现的目标吗?我真的很感激
编辑:我的问题是,如果我必须使用递归,而不是如何将我刚刚做的事情拆分成一个单独的方法。
$tree = array();
/*
* $three = array( array( 'id','parent_id','displayAs', 'children' ) )
*/
foreach ( $taxonomyFullList as $firstLevel ) {
// Get all
if( (int)$firstLevel['parent_id'] == 0 ) {
$tree[] = array(
'id' => $firstLevel['id'],
'parent_id' => $firstLevel['parent_id'],
'displayAs' => $firstLevel['displayAs'],
'type' => $firstLevel['type'],
'children' => array()
);
$key = array_search( $firstLevel,$taxonomyFullList );
unset( $taxonomyFullList[$key] );
}
}
foreach ( $taxonomyFullList as $secondLevel ) {
foreach ( $tree as $firstTreeLevel ) {
if( (int)$secondLevel['parent_id'] === (int)$firstTreeLevel['id'] ) {
$newArray = array(
'id' => $secondLevel['id'],
'parent_id' => $secondLevel['parent_id'],
'displayAs' => $secondLevel['displayAs'],
'type' => $secondLevel['type'],
'children' => array()
);
$key = array_search( $firstTreeLevel, $tree );
array_push( $tree[$key]['children'], $newArray );
$taxonomyFullListKey = array_search( $secondLevel,$taxonomyFullList );
unset( $taxonomyFullList[$taxonomyFullListKey] );
}
}
}
这取决于您的数据,但您可能必须在某个地方使用递归。首先,创建一个填充一个项的函数,然后,当该项有子项时,重用相同的函数。
基本上,你需要这样的东西:
function createItem() {
$item = array();
// ...
// populate the item properties
// ...
$item['children'] = createItem();
return $item;
}
$root = createItem();