Click on the links for full reports, ratings and man-of-the-matches
PSG won 2-1 in the French capital thanks to a goalkeeping howler by Porto's Helton to end their pool campaign ahead of the Portuguese side and top of the group.
A stoppage-time penalty from substitute Ivan Krstanovic handed Dinamo Zagreb a first goal and point with a 1-1 dead rubber draw at home to Dynamo Kiev in appalling conditions in the Croatian capital.
Bundesliga side Schalke went through as Group B winners after a 1-1 draw at Montpellier.
Arsenal had to settle for the runners-up spot after a 2-1 defeat to Olympiacos in Piraeus.
Zenit St Petersburg took the Europa League spot up for grabs in Group C with a 1-0 away win against a weakened AC Milan side.
Competition debutants Malaga were held 2-2 at home by Anderlecht in their final game which was marred by clashes between police and visiting Belgian fans in the stands.
A 1-0 defeat in their final game at Group D winners Borussia Dortmund meant Manchester City finished bottom and without a win.
Ajax claimed the Europa League place for finishing third in Group D, despite being crushed 4-1 by Real Madrid at the Bernabeu.