Efectivamente, no asignas más de un nivel de profundidad porque lo haces con un foreach, solo tienes la posibilidad de hacer una pasada sobre el array. De esta manera, por cada nivel de profundidad del menú tienes que hacer un foreach. La solución es una función recursiva, te paso un ejemplo con BD, pero que puedes adaptar facilmente, saludos:
http://barcoavenus.blog.com/category/php/