Ich kenne mich mit PHP leider nicht besonders gut aus, weil ich Perl bevorzuge, aber ich versuche dennoch zu helfen.
Ich würde die Textdatei einfach Zeile für Zeile in einen assoziativen Array (Hash) einlesen, der in etwa diese Struktur hat:
$hash[Kategorie][Name]
Der Wert ist dann eine Referenz auf eine andere Hashtabelle, die die Werte URI und Kategorie enthält. URI ist ein Skalar und Kategorie ist eine Referenz auf $hash[Unterkategorie].
Um die Textdatei auszulesen, kannst du einfach for dem while eine Variable $aktuelle_kategorie initieren. Falls die Zeile dann das Format [(.*)] hat, dann setzt du $aktuelle_kategorie auf den Wert zwischen den Klammern ($1?).
Dann solltest du die einzelnen Zeilen den Kategorien zuordnen können.
Auf diesem Weg kannst du das Menü recht leicht ausgeben lassen. Du könntest eine function schreiben, die mit der Kategorie 'Haupt' beginnt, dann den Schlüssel des Hash und die URI ausgibt und falls die Kategorie gesetzt ist, und auch angezeigt werden soll, ruft sich diese function rekursiv auf.
Edit:
Das ist nur eine Möglichkeit, wie man es in Perl realisieren könnte, mit den Mitteln, von denen ich weiß, dass sie in PHP auch existieren sollten. Es gibt sowohl für Perl als auch für PHP vermutlich ellegantere Möglichkeiten.