具有重复子级的PHP分支递归
我有一个平面结构,我需要转换成嵌套的树状结构。这不同于,因为孩子们可以重复(即,可以有相同的问题ID和家长ID)。我试图用分支递归来解决这个问题,但运气不好 输入(平面阵列): 所需输出(嵌套数组):具有重复子级的PHP分支递归,php,recursion,tree,Php,Recursion,Tree,我有一个平面结构,我需要转换成嵌套的树状结构。这不同于,因为孩子们可以重复(即,可以有相同的问题ID和家长ID)。我试图用分支递归来解决这个问题,但运气不好 输入(平面阵列): 所需输出(嵌套数组): 您可以使用引用指针解决此问题: $newArray = array(); $pointer[] = &$newArray; foreach($arr as $ar) { if(stristr($ar['name'], "start")) { // Start
您可以使用引用指针解决此问题:
$newArray = array();
$pointer[] = &$newArray;
foreach($arr as $ar) {
if(stristr($ar['name'], "start")) { // Start
$pointer[] = &$pointer[count($pointer)-1][$ar['name']][];
} else if(stristr($ar['name'], "end")) { // End
array_pop($pointer);
} else {
$pointer[count($pointer)-1][$ar['name']] = $ar['answer'];
}
}
为了加快速度,您可以使用stripos($ar['name'],“start”)!=虚假的
[
'albumName' => 'Album Name',
'albumGenre' => 'Album Genre',
'trackStart' => [
[
'trackName' => 'Track One'
],
[
'trackName' => 'Track Two',
'artistStart' => [
[
'artistName' => 'Artist Name'
]
]
]
],
'albumDate' => 'album Date'
]
$newArray = array();
$pointer[] = &$newArray;
foreach($arr as $ar) {
if(stristr($ar['name'], "start")) { // Start
$pointer[] = &$pointer[count($pointer)-1][$ar['name']][];
} else if(stristr($ar['name'], "end")) { // End
array_pop($pointer);
} else {
$pointer[count($pointer)-1][$ar['name']] = $ar['answer'];
}
}