Bu kod ve gösterim benim değil. Evan K, çok değerli aynı isim sorgusunu özel bir işlevle çözer;)
http://php.net/manual/en/function.parse-str.php#76792
Kredi Evan K.'ye gidiyor.
Yinelenen alanlar söz konusu olduğunda, parse_str yerleşiminin bir sorgu dizesini CGI standart yolunda işlemediğinden bahsetmektedir. Bir sorgu dizesinde aynı ada sahip birden çok alan varsa, diğer tüm web işleme dilleri bunları bir diziye okur, ancak PHP sessizce bunların üzerine yazar:
<?php
# silently fails to handle multiple values
parse_str('foo=1&foo=2&foo=3');
# the above produces:
$foo = array('foo' => '3');
?>
Instead, PHP uses a non-standards compliant practice of including brackets in fieldnames to achieve the same effect.
<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');
# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>
This can be confusing for anyone who's used to the CGI standard, so keep it in mind. As an alternative, I use a "proper" querystring parser function:
<?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']);
?>