Halladay (5-6) allowed just four runners and struck out five to earn his first win since May 17. The two-time Cy Young Award winner was winless in his previous five starts, including three after returning from a two-month stint on the disabled list.
Josh Lindblom had two strikeouts in the eighth and Jonathan Papelbon finished off a four-hitter for his 24th save in 27 tries.
Joe Saunders (5-8) was the hard-luck loser for Arizona, which had its four-game winning streak snapped. The lefty allowed two runs and six hits in 6 1-3 innings.