Aqui está o que eu descobri:
O envio de campos de formulário com vários valores, ou seja, o envio de matrizes através de vars GET / POST, pode ser feito de várias maneiras diferentes, pois um padrão não é necessariamente explicitado.
Três maneiras possíveis de enviar campos ou matrizes com vários valores seriam:
?cars[]=Saab&cars[]=Audi
(Melhor maneira - o PHP lê isso em uma matriz)
?cars=Saab&cars=Audi
(Mau modo - o PHP registrará apenas o último valor)
?cars=Saab,Audi
(Ainda não tentei isso)
Exemplos de formulário
Em um formulário, os campos com valores múltiplos podem assumir a forma de uma caixa de seleção definida como múltipla :
<form>
<select multiple="multiple" name="cars[]">
<option>Volvo</option>
<option>Saab</option>
<option>Mercedes</option>
</select>
</form>
(NOTA: Nesse caso, seria importante nomear o controle select some_name[]
, para que os vars de solicitação resultantes fossem registrados como uma matriz pelo PHP)
... ou como vários campos ocultos com o mesmo nome :
<input type="hidden" name="cars[]" value="Volvo">
<input type="hidden" name="cars[]" value="Saab">
<input type="hidden" name="cars[]" value="Mercedes">
NOTA: O uso field[]
de vários valores é realmente pouco documentado. Não vejo nenhuma menção a isso na seção sobre chaves com vários valores na string de consulta - Wikipedia ou nos documentos do W3C que lidam com entradas com várias seleções.
ATUALIZAR
Como comentaram os comentaristas, isso é muito específico da estrutura. Alguns exemplos:
Cadeia de consulta:
?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3
Trilhos:
"list_a": "3",
"list_b":[
"1",
"2",
"3"
],
"list_c": "1,2,3"
Angular:
"list_a": [
"1",
"2",
"3"
],
"list_b[]": [
"1",
"2",
"3"
],
"list_c": "1,2,3"
( Discussão angular )
Veja comentários para exemplos em node.js , Wordpress , ASP.net
Manutenção da ordem:
Mais uma coisa a considerar é que, se você precisar manter a ordem dos seus itens (ou seja, matriz como uma lista ordenada), realmente terá apenas uma opção: passar uma lista delimitada de valores e convertê-la explicitamente em uma matriz você mesmo.