Como ves resulta bastante simple un arbol es una estructura recursiva por si misma; cada vez que se procesa un nodo del arbol se hace lo propio para todos sus hijos...
Lo que nesesitarias adicionalmente es una clase de categorias q contenga los nodos q son raiz del arbol, es decir aquellos que no tienen padre... espero te sea util salu2
Código PHP:
class Arbol
{
private $id;
private $nombre;
private $childs;
function __construct($id,$name)
{
$this->id=$id;
$this->name=$name;
$this->childs=array();
$this->loadChilds();
}
function loadChilds()
{
//obtener todos los hijos de este arbol
$chils=this->obtenerHijos();
foreach($childs as $child)
{
$ch=new Arbol($child['id'],$child['name']); //aca esta la llamada recursiva
array_push($this->childs,$ch);
}
}
function obtenerHijos()
{
//busca en la base de datos todos los registros con
//id_padre igual a $this->id
//retorna un array de objetos [{id,name}]
}
}