How can i wrap an array grid onto a different object without the objects "collapsing"?
You can do this by using a lattice to proxy the shrinkwrap modifier.


Add a lattice at the same position as where you want your objects to intersect. 





Add a shrinkwrap modifier set to your cylinder.





Add a lattice modifier to your array




sources :

https://www.youtube.com/watch?v=tsNPpFvpTAU

https://youtu.be/UfhJ0mBUqr8