How to merge intersection of an object with itself? While trying to create this simple pattern,I encounter a problem and don't know how to solve it. 

I want to use it to create a phone case and need to do Boolean operation on it. but because i created it with an array operator and because the cylinders are not correctly merged together, a Boolean either does unexpected result or refuse to execute.
Here is a picture of what I am pretty sure is the problem, but eventhough I spent hours on different forums, i couldn't find anyone that had exactly this problem... 

How can I merge all the cylinders together ? i already removed doubles, recalculate normals, and a few other things.

thanks in advance for your help !
Per the comments, a watertight mesh can be generated using Boolean operations as long as each of the tori in the model are watertight. 

Steps:

1) Start with the mesh with all of the tori. This example was formed by adding a single torus, then using array modifier and applying the modifiers. If you look closely, all of the tori are in a single mesh, but not connected.



2) Add a cube that encloses the tori mesh.


3) Apply a Boolean modifier to the tori mesh. Change the solver to 'carve'. Click apply.


The resulting mesh is watertight and has clean meshes.





Blend file prior to applying the Boolean operation - 



To make the tori a pattern on a solid backing, a union Boolean operation can be used to join these tori to the solid backing.