Non sò bene a cosa ti serva l'array quindi ti scrivo una funzione generica che restituisce un array contenente un elemento titolo con il titolo della categoria e figli con un altro array di cui le chiavi sono gli id dei record figli e cosi via ricorsivamente...
Codice PHP:
function cat_genealogy($start=0)
{
$row=mysql_fetch_array(mysql_query("SELECT * FROM categorie WHERE id='{$start}'"));
$return['titolo']=$row['titolo'];
$result=mysql_query("SELECT * FROM categorie WHERE padre='{$start}'");
while ($row=mysql_fetch_array($result))
{
$return['figli'][$row['id']]=cat_genealogy($row['id']); //ricorsiva: figli indiretti
}
return $return;
}