Since Blender 2.8, you've been able to set a U and V offset per element in an array. Well,OK, that's an offset. But it gives you access to more.
The elements' UVs change at the same rate as the Generated UVs of the whole array. So if you have set any UV offsets in your Array modifiers, and then take the difference between the element UV and the array's Generated UV, you get a per-element UV: a pair of numbers which is constant per element, but different for each, which you can use for anything you like. (Shown as color in the array on the left, below.)
In this example, the per-tile UV has been used to look up a color from a Noise texture. The R and G found in the noise at that coordinate have been used to displace the Y location and Z rotation of an image texture, per tile.