Nested sets, php array and conversion

I need to convert my nested set structure (mysql) to json for this spacetree 1) http://blog.thejit.org/wp-content/jit-1.0a/examples/spacetree.html

I found this function to create an array from nested sets: 2) http://semlabs.co.uk/journal/converting-nested-set-model-data-in-to-multi-dimensional-arrays-in-php

I can also convert php array to json using php function json_encode

My problem: the nestify function (from the second link) gives me not quite what I need. I need something like this: http://pastebin.com/m68752352

Can you help me modify the "nestify" function so that it gives me the correct array?

Here is this function again:

function nestify( $arrs, $depth_key = 'depth' ) { $nested = array(); $depths = array(); foreach( $arrs as $key => $arr ) { if( $arr[$depth_key] == 0 ) { $nested[$key] = $arr; $depths[$arr[$depth_key] + 1] = $key; } else { $parent =& $nested; for( $i = 1; $i <= ( $arr[$depth_key] ); $i++ ) { $parent =& $parent[$depths[$i]]; } $parent[$key] = $arr; $depths[$arr[$depth_key] + 1] = $key; } } return $nested; } 
+4
source share
1 answer

The following snippet should do the trick adapted from the PHP Doctrine code I found on the Internet:

 function toHierarchy($collection) { // Trees mapped $trees = array(); $l = 0; if (count($collection) > 0) { // Node Stack. Used to help building the hierarchy $stack = array(); foreach ($collection as $node) { $item = $node; $item['children'] = array(); // Number of stack items $l = count($stack); // Check if we're dealing with different levels while($l > 0 && $stack[$l - 1]['depth'] >= $item['depth']) { array_pop($stack); $l--; } // Stack is empty (we are inspecting the root) if ($l == 0) { // Assigning the root node $i = count($trees); $trees[$i] = $item; $stack[] = & $trees[$i]; } else { // Add node to parent $i = count($stack[$l - 1]['children']); $stack[$l - 1]['children'][$i] = $item; $stack[] = & $stack[$l - 1]['children'][$i]; } } } return $trees; } 
+8
source

All Articles