Salve,
ho bisogno del vostro preziosissimo aiuto per creare una <select> che visualizzi l'albero delle categorie + illimitate sottocategorie.
Lo script che vi posto è in grado di visualizzare l'albero utilizzando ul + li ma ho bisogno di voi per creare la funzione che stampi l'albero nella select in uno dei seguenti modi:

1)

Capitali
-- Capitali Americane
---- Canada
------ Ottawa
-- Capitali Asiatiche
-- Capitali europee
---- Italia
-- Capitali Oceaniche
Dove siamo

2)

Capitali
Capitali -> Capitali Americane
Capitali -> Capitali Americane -> Canada
Capitali -> Capitali Americane -> Canada -> Ottawa
Capitali -> Capitali Asiatiche
Capitali -> Capitali europee
Capitali -> Capitali europee -> Italia
Capitali -> Capitali Oceaniche
*/


Codice PHP:
<?php
/*DATABASE:
CREATE TABLE `categorie` (
  `categoria_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT '0',
  `posizione` int(3) DEFAULT NULL,
  `categoria` varchar(255) DEFAULT NULL,
  `descrizione` text,
  PRIMARY KEY (`categoria_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


//Connection to database

$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Not connected : ' . mysql_error());
}

if (! mysql_select_db('esempio') ) {
    die ('Can\'t use foo : ' . mysql_error());
}

$refs = array();
$list = array();

$sql = "SELECT categoria_id, parent_id, categoria FROM categorie";
$result = mysql_query($sql);
while($data = @mysql_fetch_assoc($result)) {
    $thisref = &$refs[ $data['categoria_id'] ];

    $thisref['parent_id'] = $data['parent_id'];
    $thisref['categoria'] = $data['categoria'];
    $thisref['categoria_id'] = $data['categoria_id'];

    if ($data['parent_id'] == 0) {
        $list[ $data['categoria_id'] ] = &$thisref;
    } else {
        $refs[ $data['parent_id'] ]['children'][ $data['categoria_id'] ] = &$thisref;
    }
}

function toUL($arr){
  $html = '<ul>'.PHP_EOL;
  foreach ($arr as $v){
    $html .= '[*]' . $v['categoria'];
    if (array_key_exists('children', $v)){
      $html .= toUL($v['children']);
    }
    $html .= ''.PHP_EOL;
  }
  $html .= '[/list]'.PHP_EOL;
  return $html;
}


function toSelect($arr){
  foreach ($arr as $v){
    $html .= '<option value="'.$v['categoria_id'].'">' . $v['categoria'].'</option>';
    if (array_key_exists('children', $v)){
   //   $html .= '<option value="';  
  //    $html .=toSelect($v['children']);
  //    $html .= '">-';  
      $html .=toSelect($v['children']);
//      $html .=toSelect($v['children']);
//      $html .=toSelect('<option value="'.$v['categoria_id'].'">' . $v['categoria'].'</option>');
     $html .= '</option>';
      
    }
    $html .= ''.PHP_EOL;
  }
  return $html;
}

echo '<select name="categoria">';
echo toSelect($list);
echo '</select>';
// build the list and output it    

echo toUL($list);
?>