以下代码假定值的顺序和深度是正确的。请注意,它使用键删除重复项。
header('Content-Type: text/plain');
$arr = array(
array( 'name' => 'Root', 'depth' => 0 ),
array( 'name' => 'Food', 'depth' => 0 ),
array( 'name' => 'Fruit', 'depth' => 1 ),
array( 'name' => 'Bannnanna', 'depth' => 2 ),
array( 'name' => 'Apple', 'depth' => 2 ),
array( 'name' => 'Bannnanna', 'depth' => 2 ),
array( 'name' => 'Meat', 'depth' => 1 ),
array( 'name' => 'Furniture', 'depth' => 0 )
);
function process( &$arr, &$prev_sub = null, $cur_depth = 0 ) {
$cur_sub = array();
while( $line = current( $arr ) ) {
if( $line['depth'] < $cur_depth ) {
return $cur_sub;
} elseif( $line['depth'] > $cur_depth ) {
$prev_sub = process( $arr, $cur_sub, $cur_depth + 1 );
} else {
$cur_sub[$line['name']] = $line['name'];
$prev_sub =& $cur_sub[$line['name']];
next( $arr );
}
}
return $cur_sub;
}
$values = process( $arr );
print_r( $values );
输出:
Array
(
[Root] => Root
[Food] => Array
(
[Fruit] => Array
(
[Bannnanna] => Bannnanna
[Apple] => Apple
)
[Meat] => Meat
)
[Furniture] => Furniture
)