Wie kann ich ein Array am besten als URL-Parameter übergeben? Ich dachte, ob das möglich ist:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
oder wie wäre es damit:
$url = 'http://www.example.com?aParam[]='.$aValues;
Ich habe Beispiele gelesen, aber ich finde es unordentlich:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
Es gibt eine sehr einfache Lösung: http_build_query()
. Ihre Abfrageparameter werden als assoziatives Array verwendet:
$data = array(
1,
4,
'a' => 'b',
'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));
wird zurückkehren
string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"
http_build_query()
erledigt für Sie alle notwendigen Escapings (%5B
=> [
und %5D
=> ]
), daher entspricht diese Zeichenfolge aParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.
Edit: Verpassen Sie nicht die oben genannte Lösung von Stefan, die die praktische http_build_query()
- Funktion verwendet: https://stackoverflow.com/a/1764199/179125
knittl hat Recht auf Flucht. Es gibt jedoch einen einfacheren Weg, dies zu tun:
$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));
Wenn Sie dies mit einem assoziativen Array tun möchten, versuchen Sie es stattdessen folgendermaßen:
PHP 5.3+ (Lambda-Funktion)
$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
},
array_keys($aValues), $aValues)
);
PHP <5.3 (Rückruf)
function urlify($key, $val) {
return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}
$url = 'http://example.com/index.php?';
$url .= implode('&', array_map('urlify', array_keys($aValues), $aValues));
Am einfachsten wäre es, die Funktion serialize
zu verwenden.
Es serialisiert jede Variable zum Speichern oder Übertragen. Sie können darüber im php manual - serialize lesen
Die Variable kann mit unserialize
wiederhergestellt werden.
Also bei der Übergabe an die URL verwenden Sie:
$url = urlencode(serialize($array))
und um die von Ihnen verwendete Variable wiederherzustellen
$var = unserialize(urldecode($_GET['array']))
Seien Sie hier jedoch vorsichtig. Die maximale Größe einer GET-Anforderung ist auf 4 KB begrenzt, die Sie leicht überschreiten können, indem Sie Arrays in einer URL übergeben.
Es ist auch nicht ganz die sicherste Art, Daten weiterzugeben! Sie sollten sich stattdessen wahrscheinlich mit der Verwendung von Sitzungen befassen.
bitte entgehen Sie Ihren Variablen bei der Ausgabe ( urlencode
).
und Sie können nicht nur ein Array drucken, Sie müssen Ihre URL mithilfe einer Schleife erstellen
$url = 'http://example.com/index.php?'
$first = true;
foreach($aValues as $key => $value) {
if(!$first) $url .= '&';
else $first = false;
$url .= 'aValues['.urlencode($key).']='.urlencode($value);
}
Ich mache dies mit serialisierter datenbank64, die verschlüsselt ist. Der beste und kleinste Weg, denke ich. Urlencode ist zu viel Platzverschwendung und Sie haben nur 4k.
<?php
$array["a"] = "Thusitha";
$array["b"] = "Sumanadasa";
$array["c"] = "Lakmal";
$array["d"] = "Nanayakkara";
$str = serialize($array);
$strenc = urlencode($str);
print $str . "\n";
print $strenc . "\n";
?>
print $str . "\n";
gibt a:4:{s:1:"a";s:8:"Thusitha";s:1:"b";s:10:"Sumanadasa";s:1:"c";s:6:"Lakmal";s:1:"d";s:11:"Nanayakkara";}
und
print $strenc . "\n";
gibt
a%3A4%3A%7Bs%3A1%3A%22a%22%3Bs%3A8%3A%22Thusitha%22%3Bs%3A1%3A%22b%22%3Bs%3A10%3A%22Sumanadasa%22%3Bs%3A1%3A%22c%22%3Bs%3A6%3A%22Lakmal%22%3Bs%3A1%3A%22d%22%3Bs%3A11%3A%22Nanayakkara%22%3B%7D
Wenn Sie diesen $array
über die URL an page_no_2.php
übergeben möchten,
ex:-
$url ='http://page_no_2.php?data=".$strenc."';
Um zum ursprünglichen Array zurückzukehren, muss es urldecode()
und dann unserialize()
sein, wie in page_no_2.php:
<?php
$strenc2= $_GET['data'];
$arr = unserialize(urldecode($strenc2));
var_dump($arr);
?>
gibt
array(4) {
["a"]=>
string(8) "Thusitha"
["b"]=>
string(10) "Sumanadasa"
["c"]=>
string(6) "Lakmal"
["d"]=>
string(11) "Nanayakkara"
}
wieder: D
Dies ist keine direkte Antwort, da dies bereits beantwortet wurde, aber alle sprachen über das Versenden der Daten, aber niemand sagte wirklich, was Sie tun, wenn es da ist, und ich brauchte eine gute halbe Stunde, um das herauszufinden. Also dachte ich, ich würde hier helfen.
Ich werde dieses Stück wiederholen
$data = array(
'cat' => 'moggy',
'dog' => 'mutt'
);
$query = http_build_query(array('mydata' => $data));
$query=urlencode($query);
Offensichtlich würden Sie es besser formatieren als dieswww.someurl.com?x=$query
Und um die Daten zurückzubekommen
parse_str($_GET['x']);
echo $mydata['dog'];
echo $mydata['cat'];
**in create url page**
$data = array(
'car' => 'Suzuki',
'Model' => '1976'
);
$query = http_build_query(array('myArray' => $data));
$url=urlencode($query);
echo" <p><a href=\"index2.php?data=".$url."\"> Send </a><br /> </p>";
**in received page**
parse_str($_GET['data']);
echo $myArray['car'];
echo '<br/>';
echo $myArray['model'];