Dieser Code und die Notation sind nicht von mir. Evan K löst eine Abfrage mit mehreren Werten und gleichem Namen mit einer eigenen Funktion ;) ist entnommen aus:
http://php.net/manual/en/function.parse-str.php#76792 Die Credits gehen an Evan K.
Es ist zu erwähnen, dass die parse_str
builtin verarbeitet einen Query-String NICHT auf die CGI-Standardweise, wenn es um doppelte Felder geht. Wenn mehrere gleichnamige Felder in einem Query-String vorhanden sind, würde jede andere Webverarbeitungssprache sie in ein Array einlesen, aber PHP überschreibt sie stillschweigend:
<?php
# silently fails to handle multiple values
parse_str('foo=1&foo=2&foo=3');
# the above produces:
$foo = array('foo' => '3');
?>
Stattdessen verwendet PHP eine nicht standardkonforme Praxis, indem es Klammern in Feldnamen einfügt, um den gleichen Effekt zu erzielen.
<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');
# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>
Dies kann für alle, die an den CGI-Standard gewöhnt sind, verwirrend sein, daher sollten Sie dies im Hinterkopf behalten. Als Alternative verwende ich eine "richtige" Querystring-Parser-Funktion:
<?php
function proper_parse_str($str) {
# result array
$arr = array();
# split on outer delimiter
$pairs = explode('&', $str);
# loop through each pair
foreach ($pairs as $i) {
# split into name and value
list($name,$value) = explode('=', $i, 2);
# if name already exists
if( isset($arr[$name]) ) {
# stick multiple values into an array
if( is_array($arr[$name]) ) {
$arr[$name][] = $value;
}
else {
$arr[$name] = array($arr[$name], $value);
}
}
# otherwise, simply stick it in a scalar
else {
$arr[$name] = $value;
}
}
# return result array
return $arr;
}
$query = proper_parse_str($_SERVER['QUERY_STRING']);
?>