Sto avendo alcuni problemi con questo codice:
Codice PHP:
function ShowCats2 ($cat_id$level$symbol='-'$count=0) {
    if (
$level == 0) return NULL;
    
$categories = Array();
    
$sql_query mysql_query('SELECT cat_id, par_id, name FROM categories WHERE par_id = '.$cat_id.' ORDER BY name');
    while (
$row mysql_fetch_assoc($sql_query)) {
        
$categories[$row['cat_id']] = str_repeat($symbol$count+1) . $row['name'];
        if (
$level-0) {$categories array_merge(ShowCats2($row['cat_id'], $level-1$symbol$count+1), $categories);}
    }
    return 
$categories;

L'ho scritto a partire dalla pillola su strutture gerarchiche e ricorsività, adattandolo in modo da poter scegliere il livello di profondità del sottoalbero estratto, il simbolo di separazione e per evitare la necessità di dichiarare in anticipo la variabile $categories.

Solo che c'è un problema che non sto riuscendo a risolvere: sarà un problema della ricorsione che non vedo, ma gli id delle categorie sono errati (successivi, per la precisione) e il sottoalbero viene estratto in modo errato. Per esempio, ecco cosa dovrebbe uscire:
codice:
Array
(
    [11] => -Ciccio
    [1] => -PC
    [4] => --Elettronica
    [2] => --Modding
    [3] => --Tuning
    [5] => -Programmazione
    [6] => --PHP
    [7] => --Python
)
Ed ecco invece cosa esce:
codice:
Array
(
    [0] => --PHP
    [1] => --Python
    [2] => --Elettronica
    [3] => --Modding
    [4] => --Tuning
    [5] => -Ciccio
    [6] => -PC
    [7] => -Programmazione
)