Posted By: Anonymous
Is there a standard way of passing an array through a query string?
To be clear, I have a query string with multiple values, one of which would be an array value. I want that query string value to be treated as an array- I don’t want the array to be exploded so that it is indistinguishable from the other query string variables.
Also, according to this post answer, the author suggests that query string support for arrays is not defined. Is this accurate?
Would it be acceptable to name multiple params the same name, and that way I would know that they belong to an array? Example:
Or would this be bad practice?
Here’s what I figured out:
Submitting multi-value form fields, i.e. submitting arrays through GET/POST vars, can be done several different ways, as a standard is not necessarily spelled out.
Three possible ways to send multi-value fields or arrays would be:
?cars=Saab&cars=Audi(Best way- PHP reads this into an array)
?cars=Saab&cars=Audi(Bad way- PHP will only register last value)
?cars=Saab,Audi(Haven’t tried this)
On a form, multi-valued fields could take the form of a select box set to multiple:
<form> <select multiple="multiple" name="cars"> <option>Volvo</option> <option>Saab</option> <option>Mercedes</option> </select> </form>
(NOTE: In this case, it would be important to name the select control
some_name, so that the resulting request vars would be registered as an array by PHP)
… or as multiple hidden fields with the same name:
<input type="hidden" name="cars" value="Volvo"> <input type="hidden" name="cars" value="Saab"> <input type="hidden" name="cars" value="Mercedes">
field for multiple values is really poorly documented. I don’t see any mention of it in the section on multi-valued keys in Query string – Wikipedia, or in the W3C docs dealing with multi-select inputs.
As commenters have pointed out, this is very much framework-specific. Some examples:
"list_a": "3", "list_b":[ "1", "2", "3" ], "list_c": "1,2,3"
"list_a": [ "1", "2", "3" ], "list_b": [ "1", "2", "3" ], "list_c": "1,2,3"
See comments for examples in node.js, WordPress, ASP.net
One more thing to consider is that if you need to maintain the order of your items (i.e. array as an ordered list), you really only have one option, which is passing a delimited list of values, and explicitly converting it to an array yourself.