Map array modified objects to underlaying surface
Create a simple array of a place object with the same settings as the array you already have.

Shrinkwrap that plane to the underlying bumpy mesh instead, then use Duplifaces or a particle system (if the former has too limited controls for what you want to achieve) to distribute the objects along the array.

Parent the duplicated object to the plane mesh with Ctrl + P, then activate Duplifaces under the Properties Window > Object > Duplication > Faces