Manchester United were stunned 3-1 at home by Crystal Palace in a shock start to their Premier League campaign.
In the second weekend of the new campaign, United were playing for the first time after being given an extra week of rest due to their involvement in the latter stages of last season’s Europa League.
But Ole Gunnar Solskjaer’s lethargic side were well below their best and Palace took full advantage thanks to Andros Townsend’s seventh minute strike and Zaha’s double against his former club.
There was a hint of controversy about Zaha’s first goal as VAR ruled Victor Lindelof had handled Jordan Ayew’s shot even though the ball was hit with force at him from close quarters.
David De Gea saved Ayew’s spot-kick, but VAR intervened again to order a retake as United’s keeper had strayed off his line and this time Zaha converted from the spot.
United’s only close-season signing Donny van de Beek came off the bench and the former Ajax midfielder reduced the deficit with a debut goal in the 80th minute.
But Zaha, who endured a difficult spell at United before rejoining Palace, showed why the Eagles are so keen to keep him amid speculation over his future as the Ivory Coast winger lashed home in the 85th minute.
It marks the first time in six years United would lose their opening league game.
Elsewhere, Arsenal capitalised on the chance to open up a six-point gap over United in the battle for a top-four finish.
Alexandre Lacazette headed the Gunners into a 25th minute lead from Pierre-Emerick Aubameyang’s cross.
But Mikel Arteta’s men were largely outplayed by the Hammers, and Michail Antonio levelled just before halftime and came close putting the visitors’ in front when his header came crashing back off the crossbar.
But Arsenal grabbed all three points five minutes from time when Dani Ceballos broke the West Ham offside trap and squared for substitute Eddie Nketiah to tap home.