Mark W Posted February 4, 2010 Share Posted February 4, 2010 Hi everyone This has had me scratching my head for a while, hopefully someone can help. I have an array which looks something like this: array( 1 => array( 'id' => 1, 'name' => 'Root', 'parent' => 0, ), 2 => array( 'id' => 2, 'name' => 'Child', 'parent' => 1, ), 3 => array( 'id' => 3, 'name' => 'Sub-Child', 'parent' => 2, ), ) I need to use the parent element to build a structure, so I'll end up with something like this: array( 1 => array( 2 => array( 3 => array(), ), ), ) The issue is that the structure could be infinitely deep. I can't work out a way to process it. Anyone have any ideas? Quote Link to comment Share on other sites More sharing options...
Psycho Posted February 4, 2010 Share Posted February 4, 2010 Why? You already have the data in a format that should be usable, why make it more complicated? Even though I think you are probably going about it wrong, I'll still provide a solution to what you asked. There is probably a more efficient solution, but htis works: function convertArray($inputArray) { end($inputArray); $lastArray = array(); $outputArray = array(); $outputArray[key($inputArray)] = current($inputArray); do { $lastArray = $outputArray; $outputArray = array(); $outputArray[key($inputArray)] = current($inputArray); $outputArray[key($inputArray)][key($lastArray)] = current($lastArray); } while (prev($inputArray)); return $outputArray; } $test = array( 1 => array( 'id' => 1, 'name' => 'Root', 'parent' => 0 ), 2 => array( 'id' => 2, 'name' => 'Child', 'parent' => 1 ), 3 => array( 'id' => 3, 'name' => 'Sub-Child', 'parent' => 2 ) ); echo "<pre>"; print_r($test); echo "\n\n"; print_r(convertArray($test)); echo "<pre>"; Output: Original Array: Array ( [1] => Array ( [id] => 1 [name] => Root [parent] => 0 ) [2] => Array ( [id] => 2 [name] => Child [parent] => 1 ) [3] => Array ( [id] => 3 [name] => Sub-Child [parent] => 2 ) ) Converted Array: Array ( [1] => Array ( [id] => 1 [name] => Root [parent] => 0 [2] => Array ( [id] => 2 [name] => Child [parent] => 1 [3] => Array ( [id] => 3 [name] => Sub-Child [parent] => 2 [3] => Array ( [id] => 3 [name] => Sub-Child [parent] => 2 ) ) ) ) ) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.