vettore - stampare array php




Come passare un array all'interno di una stringa di query? (5)

Controlla la funzione parse_string http://php.net/manual/en/function.parse-str.php

Restituirà tutte le variabili da una stringa di query, inclusi gli array.

Esempio da php.net:

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>

Esiste un modo standard per passare un array attraverso una stringa di query?

Per essere chiari, ho una stringa di query con più valori, uno dei quali sarebbe un valore di array. Voglio che il valore della stringa di query sia trattato come una matrice, non voglio che l'array sia esploso in modo che non sia distinguibile dalle altre variabili della stringa di query.

Inoltre, in base a questa risposta post , l'autore suggerisce che il supporto della stringa di query per gli array non è definito. È accurato?

MODIFICARE:

Sulla base della risposta di @ Alex, non esiste un modo standard per farlo, quindi il mio follow up è quindi un modo semplice per riconoscere che il parametro che sto leggendo è un array sia in PHP che in Javascript ?

Sarebbe accettabile nominare più parametri con lo stesso nome, e in questo modo saprei che appartengono a un array? Esempio:

?myarray=value1&myarray=value2&myarray=value3...

O sarebbe una cattiva pratica?


Ecco cosa ho capito:

L'invio di campi modulo multi-valore, ovvero l'invio di array tramite VAR GET / POST, può essere eseguito in diversi modi, poiché uno standard non è necessariamente spiegato.

Tre possibili modi per inviare campi o matrici a più valori potrebbero essere:

  • ?cars[]=Saab&cars[]=Audi (Miglior modo - PHP legge questo in un array)
  • ?cars=Saab&cars=Audi (Bad way- PHP registra solo l'ultimo valore)
  • ?cars=Saab,Audi (non ho provato questo)

Esempi di forma

Su un modulo, i campi multivalore possono assumere la forma di un riquadro di selezione impostato su più :

<form> 
    <select multiple="multiple" name="cars[]"> 
        <option>Volvo</option> 
        <option>Saab</option> 
        <option>Mercedes</option> 
    </select>
</form>

(NOTA: In questo caso, sarebbe importante nominare il controllo select some_name[] , in modo che le richieste vars risultanti vengano registrate come array da PHP)

... o come più campi nascosti con lo stesso nome :

<input type="hidden" name="cars[]" value="Volvo">
<input type="hidden" name="cars[]" value="Saab">
<input type="hidden" name="cars[]" value="Mercedes">

NOTA: l' uso del field[] per più valori è scarsamente documentato. Non vedo alcuna menzione nella sezione sulle chiavi multivalore nella stringa di query - Wikipedia , o nei documenti W3C che trattano di input a selezione multipla.

AGGIORNARE

Come hanno sottolineato i commentatori, questo è molto specifico per il framework. Qualche esempio:

Stringa della domanda:

?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3

Rails:

"list_a": "3", 
"list_b":[
    "1",
    "2",
    "3"
  ], 
"list_c": "1,2,3"

Angolare:

 "list_a": [
    "1",
    "2",
    "3"
  ],
  "list_b[]": [
    "1",
    "2",
    "3"
  ],
  "list_c": "1,2,3"

( discussion angolare)

Vedi i commenti per gli esempi in node.js , Wordpress , ASP.net

Mantenimento dell'ordine: un'altra cosa da considerare è che se hai bisogno di mantenere l' ordine dei tuoi oggetti (ad es. Array come lista ordinata), hai solo un'opzione, che sta passando un elenco di valori delimitato e convertendolo esplicitamente in un array te stesso.


Non penso che ci sia uno standard.
Ogni ambiente web fornisce il proprio "standard" per tali cose. Inoltre, l'url di solito è troppo corto per qualsiasi cosa (limite di 256 byte su alcuni browser). Ovviamente è possibile inviare più array / dati con richieste POST.

Tuttavia, ci sono alcuni metodi:

  1. C'è un modo PHP, che usa parentesi quadre ( [ , ] ) nelle query URL. Ad esempio una query come ?array_name[]=item&array_name[]=item_2 è stato detto funzionare, nonostante sia scarsamente documentato, con PHP che lo converte automaticamente in un array. Fonte: https://.com/a/9547490/3787376

  2. I formati di interscambio dati oggetto (ad es. JSON - sito web ufficiale , documentazione PHP ) possono essere utilizzati anche se hanno metodi di conversione delle variabili da e verso le stringhe come fa JSON.
    È inoltre necessario un codificatore di url (disponibile per la maggior parte dei linguaggi di programmazione) affinché HTTP ottenga richieste per codificare correttamente i dati di stringa.

Sebbene il "metodo delle parentesi quadre" sia semplice e funzioni, è limitato a PHP e matrici.
Se sono richiesti altri tipi di variabili come le classi o le variabili di passaggio all'interno di stringhe di query in una lingua diversa da PHP, si consiglia il metodo JSON.

Esempio in PHP del metodo JSON (metodo 2):

$myarray = array(2, 46, 34, "dfg");
$serialized = json_encode($myarray)
$data = 'myarray=' . rawurlencode($serialized);
// Send to page via cURL, header() or other service.

Codice per la ricezione della pagina (PHP):

$myarray = json_decode($_GET["myarray"]); // Or $_POST["myarray"] if a post request.

Puoi usare http_build_query per generare una querystring con codifica URL da una matrice in PHP. Mentre la querystring risultante verrà espansa, puoi decidere un separatore univoco che vuoi come parametro del metodo http_build_query , quindi quando si tratta di decodificare, puoi controllare quale separatore è stato usato. Se fosse l'unico che hai scelto, allora sarebbe l'array querystring altrimenti sarebbero i normali querystring.


Una stringa di interrogazione contiene dati testuali quindi non c'è altra scelta che esplodere l'array, codificarlo correttamente e passarlo in un formato rappresentativo di tua scelta:

p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}

e quindi decodificarlo nel codice lato server.







querystringparameter