A PHP class to build parent child arrays from a flat array or database query results.

I am currently developing using Kohana 3.2 PHP Framework incorporating Mustache Templates and the Twitter Bootstrap with LESS CSS and loving it. I recently wrote this simple php class to convert a flat array with id and parent_id keys into a multi-dimensional array where parents have a `children` key with children in a sub-array.

class BuildParentChild {

	private $data = array();
	public $rendered;

	public function __construct(&$Input)
	{
		foreach($Input as $Item)
		{
			$Item= (array) $Item;
			$this->data['items'][$Item['id']] = $Item;
			$this->data['parents'][$Item['parent_id']][] = $Item['id'];
			if(!isset($this->top_level) || $this->top_level > $Item['parent_id'])
			{
				$this->top_level = $Item['parent_id'];
			}
		}
		return $this;
	}

	public function build($id)
	{
		$return{$id} = array();
		foreach($this->data['parents'][$id] as $child)
		{
			$build = $this->data['items'][$child];
			if(isset($this->data['parents'][$child]))
			{
				$build['has_children'] = true;
				$build['children'] = $this->build($child);
			}
			else
			{
				$build['has_children'] = false;
			}
			$return{$id}[] = $build;
		}
		return (array) $return{$id};
	}

	public function render()
	{
		if(!isset($this->rendered) || !is_array($this->rendered))
		{
			$this->rendered = $this->build($this->top_level);
		}
		return $this->rendered;
	}
}
$Menu = new BuildParentChild($menu_items);
var_dump($Menu->render());

Consider the following table

id parent_id Name
1 0 Top
2 1 Second Level
3 2 Third Level
4 1 Another Second Level
5 0 Another Top Level

Would generate the following result.

array(
  'id' => 1,
  'name' => top,
  'has_children' => true,
  'children' => array(
    array(
      'id' => 2,
      'name' => Second Level,
      'has_children' => true,

and so on.