Halladay (5-6) recorded his first win since May 17, hurling seven scoreless innings. The right-hander stifled the Diamondbacks on three hits while issuing one walk and striking out five.
Josh Lindblom tossed a scoreless eighth inning and Jonathan Papelbon completed the whitewash with his 24th save as the Phillies evened their three-game series.
Erik Kratz drove in a pair of runs with a solo homer and a bases-loaded walk for the victors.
Joe Saunders (5-8) took the hard-luck loss for the Diamondbacks, yielding a pair of runs on six hits over 6 1/3 frames.
Third-place Arizona, which came into the contest two games out of first place in the National League West, saw its four-game winning streak snapped.