Converting a linear array (like a mysql record set) into a tree, or multi-dimensional array can be a real bugbear. Capitalizing on references in PHP, we can 'stack' an array in one pass, using one loop, like this:<?phpfunction array_stack (&$a, $p = '@parent', $c = '@children'){ $l = $t = array(); foreach ($a AS $key => $val): if (!$val[$p]) $t[$key] =& $l[$key]; else $l[$val[$p]][$c][$key] =& $l[$key]; $l[$key] = (array)$l[$key] + $val; endforeach; return $a = array('tree' => $t, 'leaf' => $l);}$node = array();$node[1] = array('@parent' => 0, 'title' => 'I am node 1.');$node[2] = array('@parent' => 1, 'title' => 'I am node 2.');$node[3] = array('@parent' => 2, 'title' => 'I am node 3.');$node[4] = array('@parent' => 1, 'title' => 'I am node 4.');$node[5] = array('@parent' => 4, 'title' => 'I am node 5.');array_stack($node);$node['leaf'][1]['title'] = 'I am node one.';$node['leaf'][2]['title'] = 'I am node two.';$node['leaf'][3]['title'] = 'I am node three.';$node['leaf'][4]['title'] = 'I am node four.';$node['leaf'][5]['title'] = 'I am node five.';echo '<pre>',print_r($node['tree'],TRUE),'</pre>';?>Note that there's no parameter checking on the array value, but this is only to keep the function size small. One could easily a quick check in there to make sure the $a parameter was in fact an array.Hope you find it useful. Huge thanks to Nate Weiner of IdeaShower.com for providing the original function I built on.