I agree with all the ripping on webdev, but I'll give a serious answer instead.
The maximum levels of abstraction is the same for the maximum levels of inheritance: one, at most. Anything over that and you are over-engineering your design. In fact, you likely don't need the 1 level either. Every serious coder and code shop I know tries to refactor away abstraction, because it always has a cost, and rarely has a concrete benefit.
Encapsulation has the same "guaranteed cost with theoretical benefits" problem. The one useful place for it is edge-of-system integration points, where your system and another one completely outside your control will be talking for years after you've left the project. Basically, if you (or your organization) have control over every place the data travels, encapsulation is unnecessary. Only encapsulate if you have to integrate a 3rd party into your data flow (like an external microservice), when you aren't sure if your system or the external one will change the API.
If that array isn't leaving your webdev setup until you close out the transaction, write it straight.
If your long term data storage guys are the ones making such demands, then call them autistic nerds, pass them the array, and mock their SQL skills. They'll handle it out of spite and save both of you unnecessary work.