Ancora una modifica. Ho creato tre classi: una generale che si occupa di inserire l'intero albero in un array e di costruire il nome. Altre due che si occupano rispettivamente di creare l'albero pronto per la stampa a video e l'albero che andrà inserito poi nel select. Di seguito inserisco le classi.
Class AstrCategories
	Codice PHP:
	
class AbstrCategories
     {
        function AbstrCategories()
                {
                   // Array che conterrà l'albero
                   $this->categories = array();
                } // END Categories
        
        function output()
                {
                }
        
        ///// METODI PRIVATI /////
        function _tree($id = 0 , $name = '' , $level = 0)
                {
                   $query = "SELECT id , name , parent FROM categories WHERE parent = $id ORDER BY name";
                   $result = mysql_query($query);
                   while ($this->row = mysql_fetch_array($result))
                        {
                           $this->_buildCategoryName($id , $name , $level);
                           // Ricorsione
                           $this->_tree ($this->row['id'],$name,$level+1);
                        }
                   return $this->categories;        
                } // END function tree
                
        function _buildCategoryName($id , $name , $level)
                {
                   $name = str_repeat("",$level) . $this->row['name'] .  "\n";
                   $this->categories["$name"] = $this->row['id'];
                } // END function _buildCategoryName
     } 
 
Class CategoriesOption
	Codice PHP:
	
class CategoriesOption extends AbstrCategories
     {
        function CategoriesOption()
                {
                   parent::AbstrCategories();
                } // END Categories
        
        function output()
                {
                   while (list($name, $id) = each ($this->_tree()))
                        {
                           echo '<option value="' . $id . '">' . $name . '</option>';
                        }
                }
     } 
 
Class CategoriesTree
	Codice PHP:
	
class CategoriesTree extends AbstrCategories
     {
        function CategoriesTree()
                {
                   parent::AbstrCategories();
                } // END Categories
        
        function output()
                {
                   while (list($name, $id) = each ($this->_tree()))
                        {
                           echo $name . ' [[url="default.php?section=administration&module=categories&op=edit&step=view&id=' . $id . '"]modifica[/url] | [url="default.php?section=administration&module=categories&op=delete&step=view&id=' . $id . '"]cancella[/url]]
';
                        }
                }
     }