Puuh, ich schwitze, mein Kopf ist leer. Ich hatte mir gedacht, der Rückgabewert spielt nur für die Ausgabe des Gesamt-Arrays eine Rolle. Das ist ja im Moment wohl auch so. Ich hab ehrlich gesagt keine Ahnung, wie ich den im "laufenden Betrieb" ins Array kriegen soll. Als Parameter an die Funktion übergeben, oder wie? Muss ich den dann vorher global zwischenspeichern? Ohje...
Du bist auch schon nah an der Lösung ;-) Du übergibst ein Array an die Funktion, füllst es und gibst es zurück, allerdings Benutzt du den den Rückgabewert nicht, also wird für alle Ebenen, bis auf die letzte, das gefüllte Array weggeworfen.
Funktionieren sollte das ganze indem du den rekursiven Aufruf so änderst:
$mainArray[$ordner] = readdirs($pfad.$ordner.'/', array(), $z+1);