Mã và ký hiệu này không phải của tôi. Evan K giải một truy vấn cùng tên nhiều giá trị với hàm tùy chỉnh;) được lấy từ:
http://php.net/manual/en/feft.parse-str.php#76792
Tín dụng vào Evan K.
Nó đề cập đến việc xây dựng parse_str KHÔNG xử lý chuỗi truy vấn theo cách tiêu chuẩn CGI, khi nói đến các trường trùng lặp. Nếu nhiều trường cùng tên tồn tại trong một chuỗi truy vấn, mọi ngôn ngữ xử lý web khác sẽ đọc chúng thành một mảng, nhưng PHP âm thầm ghi đè lên chúng:
<?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']);
?>