Для этого конкретного вопроса выбранный ответ является правильным, но если в URL-адресе есть избыточный параметр - например, дополнительное «е» - функция молча завершится сбоем без выдачи ошибки или исключения:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Поэтому я предпочитаю использовать свой собственный парсер, например:
//$_SERVER['QUERY_STRING'] = `a=2&b=2&c=5&d=4&e=100&e=200&e=300`
$url_qry_str = explode('&', $_SERVER['QUERY_STRING']);
//arrays that will hold the values from the url
$a_arr = $b_arr = $c_arr = $d_arr = $e_arr = array();
foreach( $url_qry_str as $param )
{
$var = explode('=', $param, 2);
if($var[0]=="a") $a_arr[]=$var[1];
if($var[0]=="b") $b_arr[]=$var[1];
if($var[0]=="c") $c_arr[]=$var[1];
if($var[0]=="d") $d_arr[]=$var[1];
if($var[0]=="e") $e_arr[]=$var[1];
}
var_dump($e_arr);
// will return :
//array(3) { [0]=> string(1) "100" [1]=> string(1) "200" [2]=> string(1) "300" }
Теперь у вас есть все вхождения каждого параметра в его собственном массиве, вы всегда можете объединить их в один массив, если хотите.
Надеюсь, это поможет!