If you are in control of both ends, and have a common environment at both ends (or different env. which have standards of ...),
then you can use a de/serialization library as well as encode/decode it to sit on the cgi (get/put...),
advantage of this would be hiding, ability to present data that may mess up the url (i.e. =, &, ', ", etc),
as well the libraries have your serialization and re-hydration to object all done for you, even for much more complex object then an array.
To an extreme, you would pretty much just have to make a
encodeToUrl( [object name], [encode method] ); on your formation of url,
and
MyObjectName myObj(decodeFromUrlArg(["arrayname"], [encode method]);
But this could be over-kill for your needs (pulling a lib for this into your current setup).
This also assumes reflection based language (java, .net....) or accompanying/annotated meta-data (c++).
-tl