Noch ein Edit: Die Daten sehen so aus, als kämen sie per mysql_fetch_array($res) aus einer Datenbank. Wenn du nicht sowohl numerische (‚0‘) als auch assoziative (‚idadressen‘) Indizes haben möchtest, verwende mysql_fetch_array($res, MYSQL_ASSOC) oder mysql_fetch_assoc($res).
In der äußeren Schleife wird nacheinander jeder Wert des Arrays $all der Variablen $a zugewiesen, also jeweils der Inhalt von $all[0], $all[1] usw.
In der inneren Schleife wird nacheinander jedes Paar (Schlüssel => Wert) aus dem aktuellen Inhalt der Variable $a hergenommen und den Variablen $key und $value zugewiesen.
Das Verwirrende daran ist vielleicht, dass foreach außen nur die Werte des Arrays liefert und innen Schlüssel und Wert. Du könntest das Beispiel auch so schreiben: